Alnitak..
186
自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动画与其他异步操作同步.