【发布时间】:2016-04-06 23:10:33
【问题描述】:
我正在使用 jQuery 编写一个 Javascript API 客户端。我的顶级请求方法如下所示:
function request(method, uri, params, proxies) {
var deferred = $.Deferred();
$.ajax({
data: method == 'GET' ? params : JSON.stringify(params),
contentType: 'application/json',
dataType: 'json',
url: api.root + uri,
type: method,
xhrFields: {
withCredentials: true
}
}).done(function(body) {
deferred.resolveWith(this, [body.data]);
}).fail(function(xhr) {
deferred.rejectWith(this, [xhr]);
});
return deferred.promise();
},
我怎样才能为我返回的延迟设置一个默认的fail 处理程序?也就是说,如果 deferred 没有附加到它的 fail 条件的其他处理程序,则调用默认处理程序。
我想这样做是为了在我的应用程序中进行全局异常处理,但具有特定处理的部分除外(并将在 deferred 上定义自己的 fail 处理程序)。
【问题讨论】:
-
延迟对象不是这样工作的。相反,有一个全局错误处理程序,然后禁用该 ajax 请求的全局事件。
-
这里不要使用
$.Deferred接口。只需在$.ajax()返回的承诺上调用then方法(或旧 jQuery 版本中的pipe)! -
有一个全局的
ajaxErrorevent,你可以使用$.ajaxSetup作为默认选项。 -
ajaxError不适合我,因为它会触发所有请求,无论是否有特殊处理。我知道这现在是标准的延迟行为,但有没有一种简单的方法可以实现同样的效果? -
您想要一个默认的失败处理程序或特定的失败处理程序。没有半途而废!
标签: javascript jquery jquery-deferred