Jquery - хранить ответ AJAX JSON как переменную - PullRequest
14 голосов
/ 22 января 2011

Я пытаюсь получить результат запроса ajax, чтобы установить переменную, к которой я могу получить доступ за пределами этого запроса.Я пробовал это JQuery - сохранение ответа ajax в глобальную переменную , но моя переменная beer остается неопределенной вне функций $.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

Ответы [ 3 ]

17 голосов
/ 22 января 2011

Это асинхронный запрос, поэтому он запускается, но ваш сценарий не ждет ответа, прежде чем двигаться дальше.Если вам нужно дождаться завершения запроса ajax, попробуйте что-то вроде этого:

var beer;
$.getJSON(jsonUrl,function(json){
    beer = json;   
    checkDrink();                
});         

function checkDrink() {
    console.log(beer);
}   
3 голосов
/ 07 сентября 2016

Предложите код ниже:

var beer = $.ajax({
    url: jsonUrl,
    async: false,
    dataType: 'json'
}).responseJSON;

Ключевые моменты:

  1. установить async в значение false, чтобы возвращать результат как переменную, а не вызывать успешный обратный вызов асинхронно
  2. установить dataType в json для анализа строки ответа сервера как json
1 голос
/ 22 января 2011

Проблема в том, что вы пытаетесь получить доступ к данным до того, как они действительно вернутся с сервера, функция 'success' - это фактически обратный вызов, который вызывается после успешного завершения вызова ajax.Функции $ .ajax (или $ .get) сразу возвращают ...

Вам нужно как-то сообщить заинтересованным функциям, что вы получили данные в переменную "beer" внутри вашего обратного вызова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...