2012-04-04 15 views
0

外部JSONファイルを検索するjQuery/Javascript関数を実行しようとしていますが、指定された変数がJSONのユーザー名の1つとして検出された場合はtrueを返します。Jquery/Javascript Skip lines?

これは私が持っているものである。いくつかの場合

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

: (与えられた変数playeraに等しい)

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)は、このようなものです理由は、コードは常にfalseを返します。

一度に1ステップずつ実行しようとしましたが、何らかの理由でChromeはコードの最初の数行を$.getJSON(liurl, function(json){まで実行してからreturn result;までスキップしていました。 if/elseステートメントを実行する部分がなぜスキップされているのかわかりません。なぜこれが起こっているのか、どのように修正するのかについてのアイデアはありますか?

+1

結果をloggedIn関数で返さないでください。getJSONの成功コールバックに必要なものを実行してください。これは、非同期に実行されるためです。 –

+0

JSONを逆シリアル化すると、ループせずに配列をチェックすることができます: return json [player]!= undefined; –

答えて

0

$ .getJSON呼び出しは関数をコールバックで実行するため、呼び出しを停止してreturn文にジャンプするため、結果を返すことはできません。 JSON呼び出しのロードが完了したらコールバックを使用するためにリファクタリングする必要があります

0

$ .getJSONは非同期メソッドです。非同期メソッドの実行が完了すると実行される関数コールバックです。それまではメイン関数の残りの部分は実行を続け、必然的にfalseを返します。