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 внутри вашего обратного вызова успеха