window.unload上的jQuery帖子(窗口或浏览器关闭)

时间:2012-04-04 12:51:39

标签: jquery

当用户以任何方式离开页面时,我需要发送一个帖子请求。到目前为止,这就是我所拥有的,但它不起作用:

$(window).unload(function(){        
 $.post("http://localhost/project/quizTime.php",{action:"updateTime",userID:userid,quizID:quizid,newTime:currentTime*1000,rand:Math.random()},function(time)
    {
    });
});

通过使用单击函数替换window.unload来测试PHP代码。这完美地工作并根据需要更新所有内容,这意味着问题在于$(window).unload trigger。

4 个答案:

答案 0 :(得分:5)

您必须使用async选项设置为false的ajax方法,如下所示:

$.ajax({
    type: 'POST',
    async: false,
    url: 'YOUR_URL',
    data: 'YOUR_DATA'
});

这样浏览器会在执行任何其他操作之前等待请求完成。

答案 1 :(得分:1)

因为$ .post是一个异步任务浏览器不会等到响应来了,请按照此解决方案中给出的答案 - $(window).unload wait for AJAX call to finish before leaving a webpage

答案 2 :(得分:1)

来自jQuery API文档

  

卸载事件的确切处理因浏览器的版本而异。例如,某些版本的Firefox会在跟踪链接时触发事件,但不会在窗口关闭时触发。在实际使用中,应该在所有支持的浏览器上测试行为,并与专有的beforeunload事件进行对比。

您似乎正在使用其中一个版本的Firefox来处理此事件。尝试Documentation中提到的 beforeUnload 事件。

答案 3 :(得分:-1)

如果您更换

$(window).unload(function(){        
 $.post("http://localhost/project/quizTime.php",{action:"updateTime",userID:userid,quizID:quizid,newTime:currentTime*1000,rand:Math.random()},function(time)
    {
    });
});

用这个:

$(window).unload( function () { alert("Bye now!"); } );

并测试,会发生什么? 如果出现警告,则问题出在$ .post ...