jQuery 1.5(2011年1月)以降、これを行う「新しい」方法は、success
コールバックを渡す代わりに遅延オブジェクトを使用することです。あなたはすべき返すの結果を$.ajax
してから使用して.done
、.fail
コールバックを追加するなどの方法の外に$.ajax
呼び出しを。
function getData() {
return $.ajax({
url : 'example.com',
type: 'GET'
});
}
function handleData(data /* , textStatus, jqXHR */ ) {
alert(data);
//do some stuff
}
getData().done(handleData);
これにより、コールバック処理がAJAX処理から切り離され、元のgetData()
関数を変更する必要なく、複数のコールバックや失敗コールバックなどを追加できます。AJAX機能を、後で完了する一連のアクションから分離するのは良いことです。。
Deferredを使用すると、複数の非同期イベントをはるかに簡単に同期することもできます。 success:
たとえば、複数のコールバック、エラーハンドラーを追加し、タイマーが経過するのを待ってから続行します。
// a trivial timer, just for demo purposes -
// it resolves itself after 5 seconds
var timer = $.Deferred();
setTimeout(timer.resolve, 5000);
// add a done handler _and_ an `error:` handler, even though `getData`
// didn't directly expose that functionality
var ajax = getData().done(handleData).fail(error);
$.when(timer, ajax).done(function() {
// this won't be called until *both* the AJAX and the 5s timer have finished
});
ajax.done(function(data) {
// you can add additional callbacks too, even if the AJAX call
// already finished
});
jQueryの他の部分でも据え置きオブジェクトを使用します。jQueryアニメーションを他の非同期操作と非常に簡単に同期できます。
deferred objects
導入されたのですか?今まで見たことがありません。また、使用するコールバックを定義するコードが実際のAJAX呼び出しとは異なる場所にあるため、少し面倒です。