Получение данных из метода $ .getJSON () - PullRequest
3 голосов
/ 12 июля 2009

Я пишу веб-приложение и мне нужно инициализировать некоторые параметры, которые я извлекаю, с помощью метода $ .getJSON ().

$.getJSON("../config/", function(data)
{
     console.debug(data);
}

Теперь, поскольку эти значения будут использоваться глобально по всему сценарию и не будут вызывать событие напрямую (что является единственной реализацией $ .getJSON (), которую я мог найти в документации), как я могу вернуть или получить этот обратный вызов данные

Ответы [ 2 ]

17 голосов
/ 12 июля 2009

Лучше всего придерживаться техники обратного вызова.

Есть 2 реальных способа заставить его работать, оба по сути одинаковы.

$.getJSON("../config/", function(data) {
        SomeObject.config = data; 
        SomeObject.load();   # assuming load tells some-object that it now has data and to get cracking
});

или

$.getJSON("../config/", function(data) {
        SomeObject.load( data );   # SomeObject sets itself up and starts doing its thing
});

Попытка использовать $ .getJSON синхронным способом (т. Е. Получить возвращаемое значение) приведет только к слезам и страданиям для вас и людей, использующих ваш сайт, поскольку синхронные соединения тенденция блокировать весь пользовательский интерфейс. :)

Как есть, делать что-то подобное асинхронно

var i = null;                              #1
$.getJSON("../config/", function(data) {   #2
        i = data;                          #3
});                                        #4
some_function_with(i);                     #5

Не будет работать, потому что строка 5 почти гарантированно будет выполняться перед строкой 3.

3 голосов
/ 12 июля 2009

Кент Фредрик: Я не уверен, что ваш подход может быть лучше, поэтому, если ваш метод лучше, дайте мне знать, как, и я приму ваше решение вместо моего, но я так и сделал:

 var my_data = null;

$.ajax(
{
    url: "../config/",
    dataType: "json",
    async: false,
    success: function(data)
    {
        my_data = data;
    }
});

Также спасибо RichieHindle, я не знал, что можно заменить переменные вне функций без возврата.

...