Chrome的最新版本是否已停止同步Ajax调用?进行同步Ajax调用时出现错误。我们更新到最新的Chrome版本-73.0.3683.103后,该问题突然出现。目前,同步调用在Firefox和IE上可以正常工作。我们正在遇到错误
消息:“无法在'XMLHttpRequest'上执行'发送':无法加载'Path ...':页面关闭时同步XHR。” 名称:“ NetworkError”
请问有人可以提出一种解决方案来使Ajax同步呼叫正常工作。我有一些功能需要确定依赖同步调用。
答案 0 :(得分:11)
是的,最近在Chrome中,他们刚刚在页面结束事件(例如beforeunload
和unload
)中禁止同步ajax。您根本无法再在Chrome中执行此操作。 更新:您可以在v73和v74中再次使用,但是(暂时)计划在v75中再次使用,除非有更多的回退。跟随这个问题的乐趣(感谢patmortech找到这个问题)。
现代的替代方法是使用sendBeacon
,它使浏览器可以离开页面浏览,同时仍然使您有机会告诉服务器正在发生的事情。这不会阻止页面被解雇。但这只是POST,而且由于它不会阻止页面解雇,因此依赖于阻止页面解雇的用例将无法使用。
答案 1 :(得分:0)
谢谢大家-Crowder和Charlietfl。使用信标解决了该问题。
万一有人在寻找解决方案,可以遵循此-http://qnimate.com/sending-data-to-server-on-page-unload/
答案 2 :(得分:0)
在某些情况下,信标可以正常工作,但是我发现它仅限于您可以进行的操作和自定义(无法设置标头破坏了我的用例)。另一种选择是使用fetch
并将keepalive
标志设置为true。根据{{3}}链接:
keepalive选项表示请求可能“超出” 启动它的网页。
window.onunload = function() {
fetch('/analytics', {
method: 'POST',
body: "statistics",
keepalive: true
});
};
它是异步的,但是发送信标也是。我对Google感到恼火,因为它迫使这种更改并打破了许多我们希望确保在加载之前完成某些工作的用例。...