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