3 回答
TA贡献1780条经验 获得超1个赞
我相信您需要使用async : false
参数来使请求同步(默认情况下是异步的)。
同步请求将锁定浏览器,直到完成为止。如果请求是异步的,则页面只会继续卸载。它足够快,以至于请求甚至都没有时间触发。
TA贡献1818条经验 获得超7个赞
最好的解决方案是使用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);
};
但是,此函数不允许您注册成功回调。
TA贡献1796条经验 获得超4个赞
您的函数和Ajax调用看起来不错,所以我的猜测是,在ajax调用有时间进入服务器并返回之前,浏览器窗口已关闭。窗口关闭时,ajax调用可能返回一些信息,请尝试向您的ajax调用添加错误功能,以查看是否为这种情况:
error: function (xhr, textStatus) {
alert('Server error: '+ textStatus);
}
- 3 回答
- 0 关注
- 484 浏览
添加回答
举报