从 jQuery v1.x 中的 $.ajax promise 捕获 403

Catching 403 from $.ajax promise in jQuery v1.x

我在从 $.ajax jQuery v1.x 的承诺中捕获 403 时遇到问题 v1.x。

同样的代码

$.ajax({
    dataType: 'jsonp',
    url: 'http://www.checkupdown.com/accounts/grpb/B1394343/',
    type: 'GET'
}).then(function () {
    console.log('success', arguments)
}, function () {
    console.log('error', arguments)
});

按预期拒绝承诺 in jQuery v2.x but logs nothing in jQuery v1.x(承诺有 readyState == 1)。

示例分别使用 2.1.3 和 1.11.3 jQuery 版本。

为什么会发生这种情况? jQuery v1 可以解决吗?

这很棘手,因为您没有提出真正的 AJAX 请求。 JSON-P 是个黑客,会给你带来各种各样的问题。

如果你真的想可靠地检测错误,你需要使用真正的 AJAX 请求。

它们的执行方式不同,因为在 1.11.x 中,错误事件处理程序未附加到脚本标记,而您拥有的只是一个 onload 或 onreadystatechange 处理程序。

https://github.com/jquery/jquery/blob/1.11.3/src/ajax/script.js#L57

https://github.com/jquery/jquery/blob/2.1.3/src/ajax/script.js#L44

除了使用超时或自己执行 jsonp 请求外,没有其他解决方法。