页面上带有JQuery的Ajax请求卸载

我正在尝试这样做:


$(window).unload( function () { 


$.ajax({

    type: "POST",

    url: "http://localhost:8888/test.php?",

    data: "test",

    success: function(msg){

         alert( "Data Saved: " + msg );

    }

}); 

alert (c);

});

但是,永远不会显示成功警报,该请求似乎也没有击中服务器。我究竟做错了什么?


子衿沉夜
浏览 487回答 3
3回答

慕神8447489

我相信您需要使用async : false参数来使请求同步(默认情况下是异步的)。同步请求将锁定浏览器,直到完成为止。如果请求是异步的,则页面只会继续卸载。它足够快,以至于请求甚至都没有时间触发。

弑天下

最好的解决方案是使用navigator.sendBeacon。它是全新的功能,已开始在新版本的浏览器中实现。该功能在Chrome 39和Firefox 31以后的浏览器中可用。在撰写本文时,Internet Explorer和Safari不支持该功能。为了确保您的请求能够在尚不支持新功能的浏览器中发送,您可以使用以下解决方案:var navigator.sendBeacon = navigator.sendBeacon || function (url, data) {  var client = new XMLHttpRequest();  client.open("POST", url, false); // third parameter indicates sync xhr  client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");  client.send(data);};但是,此函数不允许您注册成功回调。

SMILET

您的函数和Ajax调用看起来不错,所以我的猜测是,在ajax调用有时间进入服务器并返回之前,浏览器窗口已关闭。窗口关闭时,ajax调用可能返回一些信息,请尝试向您的ajax调用添加错误功能,以查看是否为这种情况:error: function (xhr, textStatus) {    alert('Server error: '+ textStatus);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JQuery