我使用:
var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});但是1.5版已经添加了延迟对象。
问:通常情况下,你什么时候使用成功、错误和完成方法,而不是延迟、完成和失败的新热点?
发布于 2011-06-09 05:22:10
对于$.ajax()及其家族来说,.success仅仅是延迟的.done的同义词,同样,.error也是.fail的同义词。
因此,实际上您展示的示例已经是延迟方法,但名称不同。
.complete在很大程度上是新的AJAX 1.6 .always的同义词,您可以使用$.then(cb, cb)获得相同的效果,无论AJAX调用成功与否,cb都会被调用。我相信在.complete、.always和$.then的变种中,传递给“失败”回调的参数会有一些细微的差别。
我个人更喜欢使用这些命名函数的延迟版本,因为这样您就不必担心延迟对象是否是jqXHR。只有jqXHRs有.success、.error和.complete,但每个延迟(包括jqXHR)都有.done、.fail和.always。
EDIT似乎jQuery开发人员同意我的观点-他们已经announced说.success,.error和.complete将在jQuery 1.8中被弃用
发布于 2011-06-23 05:13:21
Deferred旨在取代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,用于说明延迟是如何有用的。
https://stackoverflow.com/questions/6285407
复制相似问题