2

我有一组相当复杂的脚本,大部分时间都可以使用。我想做的是发出 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。

对此有什么想法吗?

4

0 回答 0