我用:
var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});
但是版本1.5添加了延迟对象。
问:总的来说,你什么时候使用成功,错误和完整的方法与新的延迟,完成和失败的热度?答案 0 :(得分:17)
对于$.ajax()
和家人.success
仅仅是延迟.done
的同义词,同样.error
是.fail
的同义词。
事实上,您展示的示例是已经延迟的方法,但名称不同。
.complete
主要是新jQuery 1.6 .always
的同义词,您可以使用$.then(cb, cb)
获得相同的效果,这会导致{{1}无论AJAX调用是否成功都要调用。我相信将cb
,.complete
和.always
变体之间的“失败”回调传递给哪些参数存在细微差别。
我个人更喜欢使用那些命名函数的延迟版本,因为那样你就不必担心你的延迟对象是否是jqXHR。只有$.then
有jqXHRs
,.success
和.error
,但每个延期(包括jqXHR)都有.complete
,{{1 }和.done
。
编辑似乎jQuery开发者同意我的意见 - 他们announced .fail
,.always
和.success
将被弃用jQuery 1.8
答案 1 :(得分:9)
延迟意味着取代jqXHR,并将成功和错误的概念抽象为ajax。
快速浏览源代码:jQuery 1.6.1
// completeDeferred is resolved in only one place.
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
deferred.promise( jqXHR ); // this attaches the promise methods to jqXHR
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
jqXHR.complete = completeDeferred.done;
我制作了一个奶酪slide show,以了解延迟是如何有用的。