
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");//有这句运行,没这句不运行,彻底给跪。
} 展开
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");//有这句运行,没这句不运行,彻底给跪。
} 展开
展开全部
这个是语句:
leaveRequest.send(null);
发送出去后,window就关闭了,此时,这个发送可能一般是没成功的(发送也是需要时间的)。
而你加了alert后,就能成功发送了,那就是alert弹出窗口,等你关闭了这个窗口后,request有足够的时间发送请求处理(假如你的网络超慢,并且你点确定按钮的速度超快的话~~~一样的会让你感觉不执行。
解决方案(不成熟,只是个人分析)
1、执行SEND后,检测执行成功性,如果不成功就死循环
2、执行一个间隔一段时间的死循环
3、定义一个timeout定时器,在定时器里执行真正的关闭操作,并把原来的关闭处理函数取消(返回false)。
当然,还有其它许多可能或可行的方案,努力!
leaveRequest.send(null);
发送出去后,window就关闭了,此时,这个发送可能一般是没成功的(发送也是需要时间的)。
而你加了alert后,就能成功发送了,那就是alert弹出窗口,等你关闭了这个窗口后,request有足够的时间发送请求处理(假如你的网络超慢,并且你点确定按钮的速度超快的话~~~一样的会让你感觉不执行。
解决方案(不成熟,只是个人分析)
1、执行SEND后,检测执行成功性,如果不成功就死循环
2、执行一个间隔一段时间的死循环
3、定义一个timeout定时器,在定时器里执行真正的关闭操作,并把原来的关闭处理函数取消(返回false)。
当然,还有其它许多可能或可行的方案,努力!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询