我有一套相当复杂的脚本,大部分时间都可以使用。我想要做的是发出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,它会拒绝它。
问题是错误函数的响应,状态,错误参数总是如下:
response =状态为0,状态为0,statusText为“error”且没有响应文本的延迟对象。 status =“错误” error =“”
我是否有某种方法可以检测到错误?我可以在firebug的网络标签和Fiddler中清楚地看到响应代码显然是401。
有关于此的任何想法吗?