Javascript 断断续续;错误:无法执行';发送';在';XMLHttpRequest'&引用;
转向stackoverflow大师,因为我需要一些帮助来理解为什么这种情况会间歇性发生,以及是否有办法确定根本原因 TL;DR我看到通过对端点的同步jQuery ajax调用执行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
GET
请求的代码19NetworkError
是间歇性的(约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。我很想知道您是否有其他信息。