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機能を分離することは良いことです!。
延期により、複数の非同期イベントの同期がはるかに簡単になります。これは、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アニメーションを他の非同期操作と非常に簡単に同期させることができます。