AJAX の部分はすぐには発生しません。これalert
は、AJAX コールバックが の新しい値を設定する前に行われますitems
。
jQuery 1.5 以降$.ajax
、Promises インターフェイスを実装するオブジェクトを返します。.done
そのため、コードを実行する前に promise が解決されていることを確認する必要があるときはいつでもメソッドを呼び出すことができます。
var promise = $.ajax({/*...*/});
promise.done(function(data){
// Only works if the promise is resolved
});
例として、遅延オブジェクトを直接作成したとします。
var promise = $.Deferred();
次に、5 秒後まで解決しないように指示しました。
setTimeout(function(){
promise.resolve("Foo");
}, 5000);
document
ただし、オブジェクトのクリックに応答するようにハンドラーをバインドします。
$(document).on("click", function () {
promise.done(function(data){
alert("Data is " + data);
});
});
アラートを匿名関数内に配置し、promise が解決された後promise.done
にのみ実行されるように渡していることに注意してください。
これにより、promise が解決されるまでキューが作成されます。最初の 5 秒間に 4 回クリックしても何も起こりませんが、その約束が解決されるとすぐに、4 つの警告ボックスが次々に表示されます。
promise が解決されたので、さらにクリックすると (5 秒間待機した後)、すぐにアクションが実行されます。
デモ: http://jsfiddle.net/w7swE/1/