onbeforeunload不执行

火狐浏览器onbeforeunload不执行,但是在函数体最后加入alert("xxx");就执行了,求解释。。求解释。。跪求解释window.onbeforeunloa... 火狐浏览器 onbeforeunload不执行,但是在函数体最后加入alert("xxx") ;就执行了,求解释。。求解释。。跪求解释
window.onbeforeunload = leave;

function leave(){

var nameText = document.getElementById("user_name");
var name = nameText.value;
var leaveRequest = new XMLHttpRequest();
leaveRequest.open("get","leave.php?name="+name);
leaveRequest.onload = function(){
if(leaveRequest.status==200){
//alert(leaveRequest.responseText);
}
}
leaveRequest.send(null);
alert("you leave");//有这句运行,没这句不运行,彻底给跪。
}
展开
 我来答
Daview
推荐于2016-10-01 · TA获得超过1075个赞
知道小有建树答主
回答量:1259
采纳率:71%
帮助的人:513万
展开全部
这个是语句:
leaveRequest.send(null);
发送出去后,window就关闭了,此时,这个发送可能一般是没成功的(发送也是需要时间的)。

而你加了alert后,就能成功发送了,那就是alert弹出窗口,等你关闭了这个窗口后,request有足够的时间发送请求处理(假如你的网络超慢,并且你点确定按钮的速度超快的话~~~一样的会让你感觉不执行。

解决方案(不成熟,只是个人分析)

1、执行SEND后,检测执行成功性,如果不成功就死循环

2、执行一个间隔一段时间的死循环

3、定义一个timeout定时器,在定时器里执行真正的关闭操作,并把原来的关闭处理函数取消(返回false)。

当然,还有其它许多可能或可行的方案,努力!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式