JQuery / Javascript основной логический вопрос - PullRequest
1 голос
/ 13 мая 2011

Я использую метод jQuery $.getJSON, чтобы обновить данные в некоторых каскадных раскрывающихся списках, в частности, значение по умолчанию, если для раскрывающегося списка ничего не возвращено, например, "NONE".

Я просто хочу уточнить, как должна действовать моя логика.

var hasItems = false; 
$.getJSON('ajax/test.json', function(data) {
hasItems = true;

    //Remove all items
    //Fill drop down with data from JSON


});

if (!hasItems)
{
    //Remove all items
    //Fill drop down with default value
}

Но я не думаю, что это правильно. Так я могу войти в функцию, получать ли я данные? Я думаю, я действительно хочу проверить, что объект данных содержит что-то - установить мой логический hasItems.

Ответы [ 3 ]

6 голосов
/ 13 мая 2011

Вы должны обработать проверку прямо внутри функции обратного вызова, проверьте пример здесь .

var hasItems = false; 
$.getJSON('ajax/test.json', function(data) {
hasItems = true;

    //Remove all items
    //Fill drop down with data from JSON
if (!hasItems)
{
    //Remove all items
    //Fill drop down with default value
}

});
6 голосов
/ 13 мая 2011

Вы хотите выполнить всю проверку возвращенных данных внутри обратного вызова, в противном случае это условие будет вызываться до вызова обратного вызова, в результате чего оно всегда будет присвоено начальное значение.

1 голос
/ 13 мая 2011

Вы имеете дело с асинхронностью, поэтому вам нужно думать о коде, который вы пишете, как о временной шкале:

+ Some code
+ Fire getJSON call
|
| server working
|
+ getJSON call returns and function runs

Код внутри функции происходит позже, чем код вне ее.

Обычно:

// Setup any data you need before the call

$.getJSON(..., function(r) { //or $.ajax() etc
    // Handle the response from the server
});

// Code here happens before the getJSON call returns - technically you could also
// put your setup code here, although it would be weird, and probably upset other
// coders.
...