2012-04-04 148 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。