何时使用.then,.done,.fail

时间:2011-07-06 17:50:00

标签: jquery ajax

如果我将自己限制在.ajax方法(而不是像.get和.load这样的快捷方式),那么我应该使用延迟对象方法

.then, .done, .fail, .when, .reject, .resolve, .always, .promise

或全球事件处理程序:

.ajaxSuccess, .ajaxComplete, .ajaxError, .ajaxSetup, .ajaxStart, .ajaxStop, 

2 个答案:

答案 0 :(得分:2)

基本上,如果您想使用延迟方法,您需要将AJAX请求分配给变量。

var request = $.ajax({ /* Make ajax goodness */ });

然后你可以使用延迟对象来引用它。

$.when( request ).then(function() {

    // Success

});

但据我所知,他们是一样的...我会查看文档并更新我是否不正确。

答案 1 :(得分:2)

关于延迟对象的方法(例如可以从jQuery AJAX请求构造)与特定延迟对象相关地执行。这与全局事件处理程序完全不同,因为这些将在任何AJAX请求时调用。因此,如果您在每个页面上只有一个AJAX请求,您将看到相同的结果,但当然,对于多个AJAX请求,情况会有很大不同。

延迟对象方法的对应部分是errorsuccesscomplete方法,它们定义了jQuery AJAX请求的回调。

示例

var jqxhr = $.ajax({url:'myapi.json', method:'post'});

现在,使用jqxhr$.when(jqxhr).then(…)相当于jqxhr.complete(…)。类似的关系适用于resolvesuccessrejecterror