jQuery Deferred vs jqXHR

时间:2011-06-08 21:17:38

标签: jquery jquery-deferred

我用:

var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});

但是版本1.5添加了延迟对象。

问:总的来说,你什么时候使用成功,错误和完整的方法与新的延迟,完成和失败的热度?

2 个答案:

答案 0 :(得分:17)

对于$.ajax()和家人.success仅仅是延迟.done的同义词,同样.error.fail的同义词。

事实上,您展示的示例是已经延迟的方法,但名称不同。

.complete 主要是新jQuery 1.6 .always的同义词,您可以使用$.then(cb, cb)获得相同的效果,这会导致{{1}无论AJAX调用是否成功都要调用。我相信将cb.complete.always变体之间的“失败”回调传递给哪些参数存在细微差别。

我个人更喜欢使用那些命名函数的延迟版本,因为那样你就不必担心你的延迟对象是否是jqXHR。只有$.thenjqXHRs.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,以了解延迟是如何有用的。