为了账号安全,请及时绑定邮箱和手机立即绑定

页面上带有JQuery的Ajax请求卸载

页面上带有JQuery的Ajax请求卸载

子衿沉夜 2019-11-28 13:03:07
我正在尝试这样做:$(window).unload( function () { $.ajax({    type: "POST",    url: "http://localhost:8888/test.php?",    data: "test",    success: function(msg){         alert( "Data Saved: " + msg );    }}); alert (c);});但是,永远不会显示成功警报,该请求似乎也没有击中服务器。我究竟做错了什么?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

同步请求将锁定浏览器,直到完成为止。如果请求是异步的,则页面只会继续卸载。它足够快,以至于请求甚至都没有时间触发。


查看完整回答
反对 回复 2019-11-28
?
弑天下

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

};

但是,此函数不允许您注册成功回调。


查看完整回答
反对 回复 2019-11-28
?
SMILET

TA贡献1796条经验 获得超4个赞

您的函数和Ajax调用看起来不错,所以我的猜测是,在ajax调用有时间进入服务器并返回之前,浏览器窗口已关闭。窗口关闭时,ajax调用可能返回一些信息,请尝试向您的ajax调用添加错误功能,以查看是否为这种情况:


error: function (xhr, textStatus) {

    alert('Server error: '+ textStatus);

}


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信