0

true外部 JSON ファイルを検索し、指定された変数が JSON のユーザー名の 1 つとして見つかった場合に返す jQuery/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 を返します。

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

4

2 に答える 2

0

$.getJSON 呼び出しはコールバックで関数を実行するため、呼び出しからスピンオフして return ステートメントにジャンプするため、結果を返すことはできません。JSON 呼び出しの読み込みが完了したら、コールバックを使用するためにリファクタリングする必要があります。

于 2012-04-04T01:52:58.937 に答える
0

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

于 2012-04-04T01:57:11.180 に答える