javascript - 为什么 $(window).on ('beforeunload' ,回调);更新到 73.0.3683.103 后不再在 Chrome 中触发我的 ajax 调用?

标签 javascript ajax google-chrome

在我们的 Web 应用程序中,我们使用在 beforeunload 事件中触发的 ajax 调用来跟踪用户是否仍在处理某条信息。大致是这样的:

$(window).on('beforeunload', function() {
    $.ajax({
               async: false,
               url: "../orderInformation/assignOrder",
               data: {
                   orderId: orderId,
                   shouldAssign: false
               }
           });
    console.info("Handled beforeunload");
});

直到今天,这在 Chrome、IE 和 Firefox 中都运行良好。从 Chrome 版本 73.0.3683.103 开始​​,Ajax 调用不再触发,尽管该处理程序中的其余 JS 确实执行。 IE。该消息被打印到控制台。

Chrome 的开发者工具栏不显示版本 73.0.3683.103 中正在执行的 AJAX 调用,并且我已确认我们的网络服务器也没有收到请求。然而,当我在 Chrome 73.0.3683.86 上运行相同的代码时,它会触发 Ajax 请求并且 Web 服务器会收到它!我确认此更改会影响 Mac OS 和 Windows。

Chrome 73.0.3683.103 中的哪些更改导致了此问题?和/或如何修复它?

客户的一系列支持请求引起了我们的注意,因为它对我们应用程序的工作方式产生了负面影响。在我作为 Web 应用程序开发人员 11 年的职业生涯中,这是我第一次不得不告诉我们的用户切换到 Internet Explorer。

最佳答案

我也遇到过这个问题。我发现一条推文称,Blink(Chrome 使用的浏览器引擎)中的页面关闭事件已删除对同步 xhr 的支持。这件事发生在四月初。 Chrome 73.0.3683.103 很可能在已删除此功能的 Blink 版本上运行。 sendBeacon 和 fetch keepalive 是在 pageunload 上触发 ajax 的新推荐方法。

The tweet in question

关于javascript - 为什么 $(window).on ('beforeunload' ,回调);更新到 73.0.3683.103 后不再在 Chrome 中触发我的 ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55659828/

相关文章:

python - 无法终止 Chrome 进程并使用 ChromeDriver 和 Chrome 通过 Python 中的 Selenium 运行内存不足

javascript - 在javascript中保存文件

javascript - javascript中 "constructor"方法的目的是什么?

javascript - Django 通过上下文动态显示表单域

javascript - 带有自己的搜索表单的数据表

AJAX 和 SEO 友好的 URL

Google Chrome 中的 CSS 动画和列

javascript - Node (express.js) next() 在流结束之前调用

javascript - 在 Webpack 插件中插入函数

ajax - 通过 AJAX 发送登录信息