Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вернуть данные из ajax функции (https://javascript.ru/forum/misc/33898-vernut-dannye-iz-ajax-funkcii.html)

laandrew 13.12.2012 13:15

Вернуть данные из ajax функции
 
Здравствуйте!
Прошу помощи в следующем вопросе.

Есть код:
function ajax_build(id, callback) {
var http = createObject();
http.onreadystatechange = function() {
if(http.readyState == 4 && http.status == 200) {
var response = http.responseText;
if(response != '') {
callback(response);
}
}
}
http.open('GET', '/scripts/ajax_build.php?id='+id+'&nocache='+nocache);
http.send(null);
}


var result=ajax_build(1, function(data){
return data;
});

document.getElementById('div').innerHTML = result;

В результате выдается: "undefined".

Прошу помощи в решении данной проблемы.

adik7960 13.12.2012 14:14

var ajax_text;
function ajax_build(id, callback) {
 var http = createObject();
 http.open('GET', '/scripts/ajax_build.php?id='+id+'&nocache='+nocache); 
 http.onreadystatechange = function() {
  if(http.readyState == 4 && http.status == 200) {
    var response = http.responseText;
     if(response != '') {text=response;} 
  } 
} 
http.send(''); 
}

document.getElementById('div').innerHTML = text;

Hoshinokoe 13.12.2012 14:21

laandrew,

Все действия необходимо выполнять в callback (т.к. операция асинхронная, то данные с сервера будут доступны только в этот момент)
var result=ajax_build(1, function(data){
document.getElementById('div').innerHTML = data;
return data;
});

И кроме того, функция ajax_build у вас ничего не возвращает, поэтому result всегда будет undefined.

laandrew 13.12.2012 21:53

Подскажите, как мне сделать, чтобы функция ajax_build возвращала значение.

Ели допустим я захочу вместо document.getElementById('div').innerHTML присвоить какой-либо переменной значение функции ajax_build и использовать в дальнейшем это значение в различных целях.

Hoshinokoe 14.12.2012 20:13

Цитата:

Сообщение от laandrew (Сообщение 221179)
Подскажите, как мне сделать, чтобы функция ajax_build возвращала значение.

Никак. Почитай про асинхронные события.

Riim 15.12.2012 16:44

Цитата:

Сообщение от Hoshinokoe
т.к. операция асинхронная

xhr.open('GET', url, false);
теперь синхронная.


Часовой пояс GMT +3, время: 11:51.