页面卸载时使用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', ...