我正在为一个坚持jQuery 1.4.3的网站编写Ajax代码。碰巧我的Ajax调用收到TCP拒绝(这是好的,是项目的一部分)。不幸的是,这个jQuery版本complete
永远不会被调用。使用jQuery 2它可以工作,status
包含error
。我无法更新jQuery版本。
可以修复代码,因为TCP拒绝会导致Ajax失败吗?
这是我的代码的简化部分,可以重现问题。它假定localhost:9999
被拒绝。
$(document).ready(function() {
$.ajax({
url: 'http://localhost:9999',
crossDomain: true,
dataType: 'script',
complete: function(XMLHTTPRequest, status) {
console.log(status);
},
});
});
我设置了一个http://jsfiddle.net/c2Yt6/,您可以在其中测试它:即使使用jQuery 1.6.4也不行,但jQuery 2.0.2还可以。
如何捕获TCP拒绝错误?
答案 0 :(得分:0)
如果您查看代码:http://code.jquery.com/jquery-1.4.3.js
script.onload = script.onreadystatechange = function() {
这部分应该在你的代码中执行(添加unminified并在那里放置一个断点)
问题是事件监听器函数永远不会被执行。如果我复制该代码并添加一行:
script.onerror=function(e){
console.log("some error",e);
};
然后检测并记录错误。
看起来像jQuery 1.4.3中的一个错误。如果您只想加载脚本,那么我建议不要使用jQuery,而是使用这样的代码:
function loadScript(params){
var s = document.createElement("script");
s.src = params.url;
s.onload = function(){
s.parentElement.removeChild(s);
params.success();
};
s.onerror = function(){
s.parentElement.removeChild(s);
params.error();
};
document.body.appendChild(s);
};