0

次のようなコードがあります。

jQuery.getJSON( "url/to/some/script.php", function( data ) {
     var test = data.someValue;
      console.log('This message should occur first');
});

console.log('this message should occur second');

// do things with data retrived above...

何が起こっているかというと、最初console.logは2番目の後に実行されています。Ajax リクエストを作成するのに時間がかかっているためだと思いますが、完了せずにスクリプトを下に移動し続けることに気づいていませんでした。そのため、AJAX リクエストの結果として得られる変数は、この直後のコードで使用しようとすると「未定義」になります。

このような状況に対処する最善の方法は何でしょうか?

4

3 に答える 3

1

jQuery.getJSON() などの jQuery の Ajax メソッドが 1 つまたは複数のコールバックを連鎖できるようにする Promise インターフェイスを使用します。

jQuery.getJSON( "url/to/some/script.php", function( data ) {
 var test = data.someValue;
     console.log('This message should occur first');
}).done(function() {
    console.log('this message should occur second');
}):
于 2013-10-08T21:27:34.587 に答える
0

jquery promises http://api.jquery.com/promise/を使用して、非同期 JavaScript を支援できます。

$.getJSON("url/to/some/script.php").success(function(data) {
  var test = data.someValue;
      console.log('This message should occur first');
}).done(function() {
console.log('this message should occur second');
// do things with data retrived above...
});
于 2013-10-08T21:29:54.227 に答える