页面卸载时使用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); }); 

但是,成功警报从来没有显示出来,这个请求也不会触及服务器。 我究竟做错了什么?

我相信您需要使用async : false参数来使请求同步(默认情况下是asynchronous的)。

尝试使用async = false来调用它;

 jQuery.ajax({url:"http://localhost:8888/test.php?", async:false}) 

我只是试了一下

最好的解决scheme是使用navigator.sendBeacon 。 这是全新的function,正在开始在新版本的浏览器中实现。 该function可用于比Chrome 39和Firefox 31更新的浏览器。本书撰写时,Internet Explorer和Safari不支持此function。 为确保您的请求在尚不支持新function的浏览器中发送,您可以使用此解决scheme:

 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); }; 

这个函数不允许你注册一个onsuccesscallback。

HTML 5规范指出,在window.unload()事件中, alert()prompt()等将不可用。 有关更多详细信息,请参阅window.unload() 。 您可以使用console.log('success');检查结果console.log('success'); 而不是alert()

你的函数和Ajax调用看起来很好,所以我的猜测是你的浏览器窗口在Ajax调用有时间去服务器之前closures。 当窗口closures时,ajax调用可能返回一些东西,尝试向你的ajax调用添加错误函数,看看是否是这种情况:

 error: function (xhr, textStatus) { alert('Server error: '+ textStatus); } 

也许你会更有效地使用onbeforeunload事件?

  $(window).bind('beforeunload', ...