jQuery / javascript基本逻辑问题

时间:2011-05-13 01:23:02

标签: javascript jquery json getjson

我正在使用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 个答案:

答案 0 :(得分:6)

您希望对回调内的返回数据进行所有检查,否则将在调用回调之前调用该条件,从而导致它始终是指定的初始值。

答案 1 :(得分:6)

您应该在回调函数内处理检查,请检查the example here

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
}

});

答案 2 :(得分:1)

您正在处理异步,所以您需要将您编写的代码视为时间轴:

+ 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.