Javascript 断断续续;错误:无法执行';发送';在';XMLHttpRequest'&引用;

Javascript 断断续续;错误:无法执行';发送';在';XMLHttpRequest'&引用;,javascript,jquery,ajax,xmlhttprequest,synchronous,Javascript,Jquery,Ajax,Xmlhttprequest,Synchronous,转向stackoverflow大师,因为我需要一些帮助来理解为什么这种情况会间歇性发生,以及是否有办法确定根本原因 TL;DR我看到通过对端点的同步jQuery ajax调用执行GET请求的代码19NetworkError是间歇性的(约1%的请求),似乎只有在Chrome/Firefox中加载时才会发生。我试图理解为什么会发生这种情况,看看是否有什么我可以做,以确认原因或再现问题的意愿 $.ajax({ async: false, type: 'GET', url: 'h

转向stackoverflow大师,因为我需要一些帮助来理解为什么这种情况会间歇性发生,以及是否有办法确定根本原因

TL;DR我看到通过对端点的同步jQuery ajax调用执行
GET
请求的代码19
NetworkError
是间歇性的(约1%的请求),似乎只有在Chrome/Firefox中加载时才会发生。我试图理解为什么会发生这种情况,看看是否有什么我可以做,以确认原因或再现问题的意愿

$.ajax({
    async: false,
    type: 'GET',
    url: 'http://differentdomain.com/api',
    data: null,
    dataType: 'text',
    error: function (request, status, error) {
        # This was added for troubleshooting
        $.ajax({
            type: "post",
            url: "https://requestb.in/removed",
            data: {status, error},
            success: function (data) {
                console.log("success");
            }
        });
    }
});
本质

不幸的是,我们的开发人员和客户并没有完全能够自己重现这个问题。客户的客户正在使用的代码只是将问题报告给控制台。我们正在捕获控制台中报告的错误,这就是我们知道错误发生的方式

我们还使用了第三方测试服务,该服务使用WebDriver自动化浏览器测试。他们的框架报告了一个
socketclosed
错误,但我相信这是他们报告的一个自定义错误,请求实际上从未发送出去

端点的实际网络错误或问题

起初,我认为这是differentdomain.com的某种网络问题造成的,但我排除了这种可能性。我已经运行了一个python脚本,在三个不同的区域向该端点发出了大约20K次的请求。在几天内总共打了大约20万个电话之后,他们都(如预期的那样)返回了
200
状态。这个端点也是一个非常可靠的CDN的背后,所以我非常怀疑CDN是否间歇性失败。这似乎也证实了只有在浏览器(特别是Chrome/Firefox)中加载时才会发生这种情况

后来添加了error函数,这样我就可以让客户端将错误报告给requestb.in进行检查,下面是正在报告的相关数据,这并不太多:

error[name]: NetworkError
status: error
error[code]: 19
error[message]: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://differentdomain.com/api'.
这是我可以提取的尽可能多的信息,所以如果有人对从这个错误中获取更多数据有任何建议,那也会非常有用

搜索StackOverflow后,其他人报告此问题时,似乎与以下一项或两项有关:

跨来源资源共享

http://differentdomain.com/api
端点确实返回
访问控制允许原点:
我相信这就是所需的全部,因为这是一个简单的CORS,没有预先安装。事实上,除非向AJAX请求添加自定义头,否则我看不到发送
选项
请求。此处是否需要来自
/api
端点的
访问控制允许方法

同步AJAX

我确实理解使用同步AJAX是一种不好的做法,如果这是根本原因,我会完全接受这种做法,但如果是,我如何理解这种做法失败的情况呢?我可以找些什么来确认这就是问题所在吗

某种阻塞扩展

如果我在Chrome上使用adblock阻止differentdomain.com/api
,我可以重现报告的错误。但是,我们可以使用自动化的Chrome实例来重现这个错误,我们使用这些实例来测试我们的应用程序,它不运行任何扩展


如果您能提供任何建议,请提前感谢

你查过网络标签了吗?你能告诉我们失败者的请求/响应吗?@MinusFour谢谢你的评论。不幸的是,我们无法访问这些数据;报告此问题的开发人员或客户都无法自行重现此问题。我希望通过使用ajax调用的error函数,我们可以以某种方式获得Chrome的network选项卡中可能显示的信息,但它似乎没有这些信息。我们使用了一个自动测试服务,它似乎能够看到这种情况发生,但它没有在网络选项卡中报告数据,它只是报告远程服务器关闭了套接字?不知道您是否解决了这个问题。这看起来也很像我们看到的间歇性行为。与您类似,我们使用的是同步AJAX。我很想知道您是否有其他信息。