使用$ .ajax()和jQuery 1.4.3捕获TCP拒绝错误

时间:2013-11-04 02:41:53

标签: javascript ajax jquery tcp

我正在为一个坚持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拒绝错误?

1 个答案:

答案 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);
};