2011-05-13 83 views
1

我正在使用jQuery方法$.getJSON來更新某些級聯下拉列表中的數據,特別是如果沒有任何內容返回給下拉列表時,則使用默認值。 「沒有」。jQuery/javascript基本邏輯問題

我只想澄清我的邏輯應該如何去。

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

回答

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 
} 

}); 
6

您想要對回調中返回的數據進行所有檢查,否則在調用回調之前會調用該條件,導致它始終是分配的初始值。

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.