4

jQueryのgetJSONメソッドを待つ方法はありますか?

この関数で受け取ったデータを解析し、特定の文字列が含まれている場合は false/true を返すだけです。しかし、非同期データ処理のため、これはそれほど簡単ではないようです。コード スニペットを次に示します。

contained = false;

$.getJSON(URL, function ( data ) {
    $.each( data, function( i, item ) {
        if ( item.Info.code == code ) contained = true;
    });
});

このコードの後、このコードが配置されている関数は「含まれる」値を返します。getJSON がまだ終了していないため、これは基本的に false です。

4

3 に答える 3

8

適切な解決策は、同期化しないことです (これは可能ですが、お勧めできません)。コールバックを適切に使用しています。非同期プログラミングには慣れが必要ですが、それだけの価値があります。

それ以外の:

function foo()
{
  ...

  contained = false;

 $.getJSON(URL, function ( data ) {
      $.each( data, function( i, item ) {
          if ( item.Info.code == code ) contained = true;
      });
  });

  // Do something with contained
}

行う:

function getContained(containedCallback)
{
  $.getJSON(URL, function(data)
  {
    var contained = false;
    $.each( data, function( i, item ) {
        if ( item.Info.code == code ) contained = true;
    });
    containedCallback(contained);
  }
  );
}

function foo()
{
  ...
  getContained(function(contained)
  {
     // Do something with contained
  });
}
于 2009-06-14T17:57:58.927 に答える
6

次のように、同期リクエストを実行してみてください。

 $.ajax({
      type: "GET",
      url: "www.foo.com",
      data: data
      async: false,
      dataType: "json"
  });
于 2009-06-14T17:48:24.707 に答える
5

ご回答ありがとうございます。プロセスを同期に設定しました:

$.ajaxSetup({'async': false});

その後、私のコードを使用しました。正常に動作しています!

その他の jQuery Ajax オプションはこちら

于 2009-06-14T18:26:16.160 に答える