2

以下のコードは、呼び出しの結果を返すはずです。すべてが正常であることを確認するために、これを同期的に行う必要がありますが、うまくいかないようです。私は何を間違っていますか?

/* jQuery library:
 * http://code.jquery.com/jquery-1.9.1.min.js
 */
function getJSON(url){
    var result;
    $.getJSON(url, { async: false, success: function(data) {
        result = data;
        alert(data); // **Edit**: also undefined
    }});
    alert(result); // undefined
    return result;
}
4

4 に答える 4

11

getJSON は async:false を尊重しません

getJSON async: falseオプションはありません。そのために使用するajax必要があります。

ドキュメントによると、getJSON次と同等です。

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

...簡単にasync: falseオプションを追加できます (今のところ、jQuery はそのサポートを終了することに注意してください)。

すべてが良好であることを確認するために、これを同期的に行う必要があります

「すべてが良好であることを知る」ために同期的に何かを行う必要はありません。結果 (「良好」またはエラー) を非同期的に処理することは完全に可能 (かつ正常) です。


あなたの質問に対するコメントには、次のように書かれています。

jsonp? これは私が使用しているコードです。

JSON-PはJSONと同じではありません ( URL に URL があるか類似してgetJSONいない限り、JSON-P は実行されません)。JSON-P は本質的に非同期です。を介した真の ajax 呼び出しとは異なり、JSON-P を同期させることはできません。callback=?XMLHttpRequest

于 2013-03-07T22:17:14.553 に答える
0

$.getJSONの省略形です$.ajax

これは省略形の Ajax 関数であり、次と同等です。

$.ajax({ dataType: "json", url: url, data: データ, success: 成功 });

非同期オプションを通過するオプションがないことに気付くでしょう。追加しようとしているパラメータは、実際には ajax リクエストでasync: falseに送信されるデータです。url

代わりにこれを試してください:

$.ajax({
  dataType: "json",
  url: url,
  async: false,
  data: data,
  success: success
});

また、あなたの発言

すべてが良好であることを確認するために、これを同期的に行う必要があります

間違っています。非同期コールバックから「すべてが正常であることを知る」ことができます。サンプルコードは、次のように記述した場合、上記でやろうとしていることを正確に実行します。

function getJSON(url){
    var result;
    $.getJSON(url, function(data) {
        alert(data);
        // do other stuff with data, call other methods etc. etc.
    });
}

次のように、コールバック関数を個別に定義して に渡すこともできます$.getJSON

function jsonCallback(data) {
    alert(data);
    // do other stuff with data, call other methods etc. etc.
} 
function getJSON(url){
    var result;
    $.getJSON(url, jsonCallback);
}
于 2013-03-07T22:23:19.743 に答える