2016-09-25 2 views
0

Я пытаюсь вернуть значение из завершенного вызова jQuery Ajax. Однако, вместо данных JSON, я получаю обратно «неопределенный». Как изменить код, чтобы получить данные JSON вместо undefined?Возвращаемое значение из jQuery Ajax

function callback(data) { 
    return data; 
} 

var xv = jQuery.ajax({ 
    url: 'http://www.domain.com/json.php', 
    dataType: 'json', 
    success: function(data) { 
     alert('Success.'); // This is alerted. 
    }, 
    error: function(data) { 
     alert('File could not be processed.'); // This is not alerted. 
    }, 
    complete: function(data) { 
     callback(data); 
    } 
}); 

console.log(callback()); // Getting "undefined" here instead of data. 
+3

Я не понимаю, что вы звоните 'callback' без параметра' data' конечно не определен. –

+0

Также первым параметром 'complete' обработчика является' jqXHR', а не данные. Данные передаются как первый параметр только для 'success'. – GSerg

+0

AJAX по умолчанию асинхронный, у вас есть данные только тогда, когда вы его получите, это в вашем обратном вызове 'success'. Сделайте вызов 'sync' или используйте свои данные в своей функции успеха. – skobaljic

ответ

0

Вы на самом деле не храните data в любом месте. Все, что вам сделать, это отражает обратно то, что дано вам, так же, как Стерлинг сказал

я бы изменить его следующим образом:

var globalData; 
function(callback){ 
    globalData = data; 
} 

Тогда console.log(globalData), и вы можете увидеть результат

2

AJAX является асинхронной по по умолчанию у вас есть данные только тогда, когда вы его получите, это в вашем обратном вызове. Сделайте вызов синхронизации или используйте свои данные в своей функции успеха.

Ваш код должен выглядеть следующим образом, вместо:

function doWithJson(data) { 
    console.log(data); 
} 
var xv = jQuery.ajax({ 
    url: 'http://www.domain.com/json.php', 
    dataType: 'json', 
    success: function(data) { 
     doWithJson(data); 
    }, 
    error: function(data) { 
     alert('File could not be processed.'); 
    }, 
    complete: function(data) { 
     /* Remove overlay */ 
    } 
}); 
+0

Бинго. Вот и все! Спасибо за вашу помощь. :) –