beforeunload 事件中的同步 ajax 请求替代支持 Edge chromium

Synchronous ajax request in beforeunload event alternative to support Edge chromium

我必须在 beforeunload 事件中发出一个同步 ajax 请求,但它抛出一个错误,因为在页面卸载事件期间,chromium 浏览器不支持同步 ajax 请求。

在页面卸载事件周期中发出同步 ajax 请求的替代方法是什么。

window.on('beforeunload',function(){
    $.ajax({
         url:'@Url.Action("ActionName","ControllerName")',
         async:false,
         data:formData,
         success:function(){
            //Success logic
         },
         error:function(){
           //Failure logic
         }
    });

});

DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load:

Note: navigator.sendBeacon() is asynchronous by default, but i need to have a synchronous request in page dismissal.

有什么建议吗?

同步XMLHttpRequest已经弃用,可以参考this doc。 Blink 已从页面关闭事件(beforeunloadunload)中删除了对同步 XHR 的支持,您再也不能在 chromium 浏览器中这样做了。

现代方法是使用 sendBeaconfetch keepalive 作为解决方法。更多信息可以参考this tweet and 。如果您不使用这些解决方法,我认为没有其他办法。