自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动画与其他异步操作同步。
deferred objects
开始介绍的?我没看过 而且,由于定义要使用的回调的代码与实际的AJAX调用位于不同的位置,因此似乎有些混乱。