从 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 请求外,没有其他解决方法。
我在从 $.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 请求外,没有其他解决方法。