JQuery - сохранение ответа Ajax jSON как переменной
Я пытаюсь получить результат запроса ajax для установки в переменной, доступ к которой я могу получить вне этого запроса. Я пробовал этот JQuery - сохранение ответа ajax в глобальной переменной, но моя переменная beer
остается undefined вне функций $.getJSON
и $.ajax
(я пробовал и другое).
Вот мой код и где я могу видеть результаты из console.log(beer)
.
var beer;
$.getJSON(jsonUrl, function (json) {
beer = json;
console.log(beer); // returns beer
});
console.log(beer); // returns undefined
var beer = (function () {
var result;
$.ajax({
url: jsonUrl,
success: function (data) {
result = data;
console.log(beer); // returns beer
}
});
console.log(result); // returns undefined
if (result) return result;
})();
console.log(beer); // returns undefined
Ответы
Ответ 1
Это асинхронный запрос, поэтому он запускается, но ваш script не дожидается ответа до его перемещения. Если вам нужно ждать по запросу ajax, попробуйте что-то вроде этого:
var beer;
$.getJSON(jsonUrl,function(json){
beer = json;
checkDrink();
});
function checkDrink() {
console.log(beer);
}
Ответ 2
Предложите следующий код:
var beer = $.ajax({
url: jsonUrl,
async: false,
dataType: 'json'
}).responseJSON;
Ключевыми моментами являются:
- установите
async
в false, чтобы возвращать результат как переменную, а не вызывайте успешную обратную связь асинхронно
- установить
dataType
в json для анализа строки ответа сервера как json
Ответ 3
Проблема в том, что вы пытаетесь получить доступ к данным до того, как они действительно вернутся с сервера, функция "успех" на самом деле является обратным вызовом, который вызывается, когда вызов ajax завершается успешно. Функции $.ajax(или $.get) возвращаются inmediatly...
Вам нужно как-то сигнализировать заинтересованным функциям, что вы получили данные в "пивной" var внутри вашего обратного вызова успеха