我发现这种情况偶尔起作用,但通常根本不起作用。
$(window).unload(function()
{
$.ajax
({
url: "script.php",
type: "POST",
data:
{
value: value
}
});
});
将async设置为false(即'async' : false
)确实解决了问题,并且每次都执行php脚本。但根据脚本,它可以冻结浏览器一段时间。
有没有一种很好的方法可以将数据发送到php脚本并让服务器执行它而无需用户等待响应?
编辑 - 我对客户端 - 服务器交互的理解是生疏的,但这不是请求发送需要很长时间,而是处理请求发送的数据。我想知道是否可以在用户不必在页面上进行处理。
答案 0 :(得分:4)
您需要在服务器端通过关闭连接然后继续处理数据来完成此操作。在PHP中它看起来像这样:
<?php
header("Content-Length: 0");
header("Connection: close");
flush();
//At this point the request is finished and you can continue to process the data.
//Keep in mind the connection is now closed and you can no longer return any information to the user.
&GT;
请注意,从技术上讲,这不是一个后台任务,因此您应该在共享主机上执行此操作。只要它不会在很长一段时间内挂起。
答案 1 :(得分:1)
我不会这么想。浏览器正在关闭,因此它正在尝试关闭所有连接。我没有看到它如何在没有让用户等待的情况下发送请求。你几乎要求它在后台工作。
我会坚持async: false
,但可能会通过Please wait...
消息或类似信息通知用户。在目标浏览器中进行测试,因为它看起来有点令人讨厌,无法关闭浏览器/选项卡并等待ajax调用完成。
答案 2 :(得分:0)
我还没有尝试,但也许您可以添加超时(使用较小的值),或者在发送后立即中止请求(使用.abort()方法)。