我有一组相当复杂的脚本,大部分时间都可以使用。我想做的是发出 AJAX 请求,然后在收到 401 错误时做一些事情。当他们收到 401 时,我发送他们进行身份验证,然后重新发送请求。我为 ajaxPrefilter 添加了一些处理,它看起来像这样:
jqXhr.then(function (response, status) {
var deferred = $.Deferred(),
data = response && response.d ? response.d : response,
result = data && _.isArray(data.results) ? data.results : data;
deferred.resolveWith(this, [result, status, jqXhr, response]);
return deferred;
},
function (response, status, error) {
var secondPromise = $.Deferred();
if (response.status == 401) {
// handle authentication
// resend request
// depending on outcome, resolve or reject secondPromise
} else {
// not authentication issue, just reject the secondPromise
}
return secondPromise;
}).promise(jqXhr);
基本上,“then”的第一部分只是解析延迟对象并将其发送回(所以等待调用的人立即得到它)。第二部分(错误)检查错误代码 401(需要身份验证)。如果是 401,它会进行身份验证、重新发送请求并处理结果。如果它不是 401,它会抛出拒绝它。
问题是错误函数的响应、状态、错误参数总是如下:
响应 = 状态为 0、状态为 0、状态文本为“错误”且没有响应文本的延迟对象。状态=“错误”错误=“”
有什么方法可以让我检测到错误吗?我可以在 firebug 的 net 选项卡和 Fiddler 中清楚地看到响应代码显然是 401。
对此有什么想法吗?