在jQuery v1.x中从$ .ajax承诺中捕获403

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

相同的代码

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

拒绝jQuery v2.x中的预期,但在jQuery v1.x中没有任何记录(promise有readyState == 1 )。

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

为什么会发生这种情况呢? 它是否可以解决jQuery v1?

它们的执行方式不同,因为在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请求。 JSON-P是一个黑客,会给你带来各种各样的问题。

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