我正在尝试这样做:
$(window).unload( function () {
$.ajax({
type: "POST",
url: "http://localhost:8888/test.php?",
data: "test",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
alert (c);
});
Run Code Online (Sandbox Code Playgroud)
但是,从未显示成功警报,此请求似乎也没有显示在服务器上.我究竟做错了什么?
Nat*_*e B 77
我相信您需要使用async : false
参数使请求同步(默认情况下是异步).
同步请求会锁定浏览器,直到完成.如果请求是异步的,则页面将继续卸载.它足够快,请求甚至没有时间发射.
Teb*_*ebo 20
尝试使用async = false调用它;
jQuery.ajax({url:"http://localhost:8888/test.php?", async:false})
Run Code Online (Sandbox Code Playgroud)
我刚尝试过.
小智 13
最好的解决方案是使用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);
};
Run Code Online (Sandbox Code Playgroud)
此功能不允许您注册onsuccess回调.
您的函数和 Ajax 调用看起来很好,所以我的猜测是您的浏览器窗口在 ajax 调用有时间往返服务器之前就已关闭。当窗口关闭时,ajax 调用可能会返回一些内容,请尝试在 ajax 调用中添加错误函数以查看是否是这种情况:
error: function (xhr, textStatus) {
alert('Server error: '+ textStatus);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37235 次 |
最近记录: |