2012-04-04 105 views
0

我試圖運行一個jQuery/Javascript函數來搜索外部JSON文件,如果給定的變量是JSON的用戶名之一,則返回trueJquery/Javascript跳過線?

這是我有: (給出的變量player等於a

function loggedIn(player) { 
    var result = false; 
    var liurl = "liplay.json"; 
    $.getJSON(liurl, function (json) { 
     $.each(json, function (key, value) { 
      if (value.username == player) { 
       alert(); 
       result = true; 
      } else {} 
     }); 
    }); 
    return result; 
} 

外部JSON文件(liplay.json)是這樣的:

[{"username":"a"},{"username":"q"}] 

對於一些原因,代碼總是返回false。

我試着一次一步地運行它,並且我發現無論出於何種原因,Chrome都運行了前幾行代碼,直到$.getJSON(liurl, function(json){,然後跳到return result;。我不知道爲什麼它跳過運行if/else語句的部分。任何想法,爲什麼會發生這種情況,以及如何解決它?

+1

不要在loggedIn函數中返回結果,只需在getJSON的成功回調中執行任何您需要的操作。這是因爲它異步執行。 – 2012-04-04 01:49:41

+0

我相信,一旦你得到你的JSON反序列化,你可以簡單地檢查陣列沒有循環它: return json [player]!= undefined; – 2012-04-04 11:24:51

回答

0

$ .getJSON調用在回調函數中執行你的函數,所以你不能返回結果,因爲它離開調用並跳轉到return語句。一旦JSON調用完成加載,您將不得不重構一些回調函數以便使用回調

0

$ .getJSON是一種異步方法 - 您傳遞給它的函數回調函數是異步方法執行完成後執行的函數,但在此之前,主函數的其餘部分繼續執行,並不可避免地返回false。