1 Востаннє редагувалося savelikan (07.01.2015 12:17:46)

Тема: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Привіт усім! Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery?
Наприклад, я надсилаю

function SendAnswers() {
jQuery.ajax({
    url:     "aaa.php",
    type:     "POST",
    dataType: "html",
    data: jQuery("#"+"test_from").serialize(), 
    success: function(response) {
        document.getElementById("result_div_id").innerHTML = response;
},
error: function(response) { //Если ошибка
document.getElementById("result_div_id").innerHTML = "Ошибка при отправке формы";
}
});

у відповідь одержую код JavaScript. Його можна виконати?

2 Востаннє редагувалося koala (07.01.2015 13:01:53)

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Звісно, можна (функція eval, або й просто document.createElement("script") ). Більше того, так можна робити міжсайтові запити (т.зв. JSONP), і jq це вміє.

3 Востаннє редагувалося Invader (07.01.2015 12:49:38)

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

У jQuery є спец. функція: https://api.jquery.com/jQuery.getScript.

Якщо ваш код яикй ви отримали через AJAX знаходиться всередині функції, то можна просто викликати цю функцію, після завантаження скрипта, і відповідно викоанється код цієї функції.

exec? Функція eval(). Але при її використання можуть виникнути проблеми з контекстом виконання.

І якщо записати в новостворений тег script, то це нічого не дасть.

Подякували: koala1

4

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Invader написав:

exec? Функція eval(). Але при її використання можуть виникнути проблеми з контекстом виконання.

Так, вибачте.

5

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Я взагалі практично вперше зустрічаюся з роботою з JavaScript, JQuery, Ajax
Я одержую от таку от стрічку:

2-3/green,7-3/green,8-4/green,9-2/green,22-1/green

Мені треба, що воно знаходило LABEL з ідентифікаторами, наприклад 2-3, і змінювало їх фон на green.
Тобто спочатку йде індентифікатор, а після / - колір, яким повинен бути блок.
От, що я робив:

function SendAnswers() { 
jQuery.ajax({ 
    url:     "aaa.php?id=1",
    type:     "POST",
    dataType: "html",
    data: jQuery("#"+"test_from").serialize(),  
    success: function(response) {
        document.getElementById("result_div_id").innerHTML = response; 
        aaa = response.split(\',\');
        for (var key in aaa) {
            var val = aaa [key];
            
            alert(val);
            
            identif_answer = val.split(\'/\');
            document.getElementById(identif_answer[0]).style.backgroundColor=identif_answer[1]; 
        } 
}, 
error: function(response) { //Если ошибка 
    document.getElementById("result_div_id").innerHTML = "Ошибка при отправке формы"; 
} 
}); 
}

може є простіше вирішення?

6

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Спробуйте в JQ

$('#result_div_id').empty().append($(response))

7

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Не використовуйте for…in  для перебирання масивів. Краще for і, можливо, має смисл видаляти пробільні символи з кінця і початку рядків за доп. jQuery методу trim:

for(var i=0; i < aaa.length; i++) {
    var val = aaa[i];
    identif_answer = val.split('/');
 document.getElementById($.trim(identif_answer[0])).style.backgroundColor = $.trim(identif_answer[1]); 
}

Якщо у вас є контроль над серверним кодом, то можна повертати JavaScript об'єкт і писати отак:

var a = {'1-2':'red', '1-3': 'green'}
for (var i in a) {
    if (a.hasOwnProperty(i)) {
        alert(i + '\n' + a[i])
    }
}

8 Востаннє редагувалося savelikan (07.01.2015 19:17:35)

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

ну от якось так виходить:

<script type="text/javascript">
function SendAnswers() { 
    jQuery.ajax({ 
        url:     "aaa.php?id=1",
        type:     "POST",
        dataType: "html",
        data: jQuery("#"+"test_from").serialize(),  
        success: function(response) {
            document.getElementById("result_div_id").innerHTML = response; 
            aaa = response.split(\',\');
                for(var i=0; i < aaa.length; i++) {
                    var val = aaa[i];
                    identif_answer = val.split(\'/\');
                    document.getElementById($.trim(identif_answer[0])).style.backgroundColor = $.trim(identif_answer[1]);
                }
    }, 
    error: function(response) { //Если ошибка 
        document.getElementById("result_div_id").innerHTML = "Ошибка при отправке формы"; 
    } 
    }); 
}
</script>

Все працює.
АЛЕ
Я одержав такі результати запиту:

1-2/yellow,2-3/yellow,3-1/yellow,4-4/yellow,5-1/yellow,6-1/yellow,7-3/yellow,8-4/yellow,9-2/yellow,10-3/yellow,11-1/yellow,12-4/yellow,13-2/yellow,14-1/yellow,15-4/yellow,16-2/yellow,17-4/yellow,18-2/yellow,19-1/yellow,20-2/yellow,21-4/yellow,22-1/yellow,23-0/yellow,24-3/yellow,25-4/yellow,26-2/yellow,27-3/yellow,28-2/yellow,29-1/yellow,30-4/yellow,31-3/yellow,32-1/yellow,33-2/yellow,34-1/yellow,35-2/yellow,35-3/yellow,35-4/yellow,36-1/yellow,36-2/yellow,36-5/yellow,37-2/yellow,37-3/yellow,37-5/yellow,38-0/yellow,38-2/yellow,38-4/yellow,39-1/yellow,39-2/yellow,39-5/yellow,40-1/yellow,40-3/yellow,40-5/yellow,41-0/yellow,41-3/yellow,41-4/yellow,42-1/yellow,42-2/yellow,42-5/yellow,43-0-0/yellow,43-1-1/yellow,43-2-2/yellow,43-3-3/yellow,43-4-4/yellow,43-5-5/yellow,43-6-6/yellow,44-0-0/yellow,44-1-1/yellow,44-2-2/yellow,44-3-3/yellow,44-4-4/yellow,44-5-5/yellow,44-6-6/yellow,45-0-0/yellow,45-1-1/yellow,45-2-2/yellow,45-3-3/yellow,45-4-4/yellow,45-5-5/yellow,45-6-6/yellow,46-0-0/yellow,46-1-1/yellow,46-2-2/yellow,46-3-3/yellow,46-4-4/yellow,46-5-5/yellow,46-6-6/yellow,47-0-0/yellow,47-1-1/yellow,47-2-2/yellow,47-3-3/yellow,47-4-4/yellow,47-5-5/yellow,48-0/yellow,48-2/yellow,48-4/yellow,49-1/yellow,49-4/yellow,50-1/yellow,50-5/yellow,51-1/yellow,51-5/yellow,52-0/yellow,52-1/yellow,53-0/yellow,53-1/yellow,53-5/yellow,

Доходить до 43-0-0/yellow,43-1-1/yellow,43-2-2/yellow,43-3-3/yellow,43-4-4/yellow,43-5-5/yellow,43-6-6/yellow, А потім не обробляє. Помилка!
Все перевіряв - не хоче працювати і все =(
показує таку помилку:

TypeError: document.getElementById(...) is null

9

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Я вже навіть перевірку робив - і вона нічого не показує

if($.trim(identif_answer[0])!== null && $.trim(identif_answer[0]) !== \'undefined\'){
    document.getElementById($.trim(identif_answer[0])).style.backgroundColor = $.trim(identif_answer[1]);
} else {
    alert(5555);
}

10

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Спробуйте перевіряти чи існує елемент з таким ідентифікатором.

  var elem = document.getElementById(elmId);
  if(typeof elem !== 'undefined' && elem !== null) {

11

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Invader написав:

Спробуйте перевіряти чи існує елемент з таким ідентифікатором.

  var elem = document.getElementById(elmId);
  if(typeof elem !== 'undefined' && elem !== null) {

Дякую, допомогло)))

А ще таке питання: Як зробити, щоб ці події  виконувалися одна за одною?

$("#test_from input").prop("disabled", true);
$("#send_button").slideToggle(700);
return up();
$("#result_div_id").slideToggle(1000);

І де вписати код, який буде виконуватися поки надсилається запит?

jQuery.ajax({ 
    url:     .............,
    type:     "POST",
    dataType: "html",
    data: jQuery("#"+"test_from").serialize(),  
    success: function(response) {.......}
})

Наперед дякую)

12

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Спробуйте отак:

$.when($("#test_from input").prop("disabled", true)).done(function() {
    $.when($("#send_button").slideToggle(700)).done(function() {
        $("#result_div_id").slideToggle(1000);
    });
});

Засунути return up() в $.when не можна. Також після return up(); інструкції які йдуть нижче виконані не будуть.

Одночасновиконувати код доки працює інший, здається, не можна. Спробуйте розмістити бажану функцію відразу після виконання AJAX запиту, або скористайтесь відповідними функціями зворотнього виклику. ПРиклад з документації:

var jqxhr = $.ajax( "example.php" )
.done(function() {
alert( "success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "complete" );
});

13

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Хоча можна зробити так:

window.onload = function() {
    function te() {
        alert('foosroda')
    }
    function f() {
        alert(1)
    }
    $.when($('table')).done(function() {
        $.when($('fff')).done(function() {
            (function () {return te()})()
            f() //функцію f буде виконано
        })
    })
}

14

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

return up() - функція, яка плавно прокручує сторінку доверху. МОже є аналог на jquery і його можна буде помістити у $.when ?

15

Re: Чи можна виконати JavaScript, котрий отриманий через AJAX JQuery:?

Я навів приклад. Спробуйте отак:

 $.when($('table')).done(function() {
$.when($('fff')).done(function() {
(function () {return up()})()
f() //функцію f буде виконано
})
})

Гляньте на метод scrollTop.