1

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

4

1 回答 1

0

如果你看代码:http ://code.jquery.com/jquery-1.4.3.js

script.onload = script.onreadystatechange = function() {

这部分应该在你的代码中执行(添加未缩小的并在那里放置一个断点)

问题是事件侦听器函数永远不会被执行。如果我复制该代码并添加一行:

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);
};
于 2013-11-04T05:36:11.083 回答