4

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

$(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 替换为 click 函数来测试 PHP 代码。这可以完美运行并根据需要更新所有内容,这意味着问题出在 $(window).unload 触发器上。

4

4 回答 4

5

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

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

通过这种方式,浏览器在执行任何其他操作之前等待请求完成。

于 2012-04-04T13:14:29.480 回答
1

因为 $.post 是一个异步任务浏览不会等到响应到来,请按照此解决方案中给出的答案 - $(window).unload 等待 AJAX 调用完成,然后再离开网页

于 2012-04-04T12:56:29.653 回答
1

来自 jQuery API 文档

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

您似乎正在使用以不同方式处理此事件的 Firefox 版本之一。尝试文档中提到的beforeUnload事件。

于 2012-04-04T12:58:30.927 回答
-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...

于 2012-04-04T13:04:12.307 回答