загрузите json в переменную

Я должен сделать что-то очень простое, но, кажется, нет простого способа сделать это, насколько я могу сказать. Я просто хочу загрузить данные JSON из удаленного источника и сохранить их в глобальной переменной JavaScript использование jQuery. Вот то, что я имею:

var my_json;
$.getJSON(my_url, function(json) {
  var my_json = json;
});

my_json переменная остается неопределенной. Я думаю, что это - ясно проблема объема. Это кажется мне, $ .getJSON метод должен возвратить JSON, но это возвращает объект XMLHttpRequest. Если я делаю это:

request = $.getJSON(my_url);
my_json = request.responseText.evalJSON();

Это не работает, потому что до readystate == 4, responsetext остается пустым. Кажется, что необходимо использовать функцию обратного вызова для возврата responsetext, так как это стреляет в успех.

Это не может быть это трудно! Право?

48
задан Aaron 1 February 2010 в 05:02
поделиться

2 ответа

Это сделает это:

var json = (function () {
    var json = null;
    $.ajax({
        'async': false,
        'global': false,
        'url': my_url,
        'dataType': "json",
        'success': function (data) {
            json = data;
        }
    });
    return json;
})(); 

Основная проблема, являющаяся тем, что $. Getjson будет бегать асинхронно, поэтому ваш JavaScript будет проходить мимо выражения, которое вызывает его еще до его успеха Обратный вызов срабатывает, поэтому нет никаких гарантий, что ваша переменная будет захватывать любые данные.

Примечание, в частности, 'async': false опция в вышеуказанном вызове AJAX. Руководство говорит:

по умолчанию все запросы отправляются асинхронный (то есть это настроено на правду по умолчанию). Если вам нужно синхронно Запросы, установите этот вариант в false. Обратите внимание, что синхронные запросы могут временно заблокировать браузер, отключение каких-либо действий во время Запрос активен.

125
ответ дан 7 November 2019 в 12:06
поделиться

бит кода должен читать:

var my_json;
$.getJSON(my_url, function(json) {
  my_json = json;
});
28
ответ дан 7 November 2019 в 12:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: