如何在窗口卸载时发送AJAX请求,而不必等待响应

时间:2011-11-05 20:58:38

标签: jquery ajax

我发现这种情况偶尔起作用,但通常根本不起作用。

$(window).unload(function()
{
    $.ajax
    ({
        url: "script.php",
        type: "POST",
        data: 
        { 
            value: value
        }
    });
});

将async设置为false(即'async' : false)确实解决了问题,并且每次都执行php脚本。但根据脚本,它可以冻结浏览器一段时间。

有没有一种很好的方法可以将数据发送到php脚本并让服务器执行它而无需用户等待响应?

编辑 - 我对客户端 - 服务器交互的理解是生疏的,但这不是请求发送需要很长时间,而是处理请求发送的数据。我想知道是否可以在用户不必在页面上进行处理。

3 个答案:

答案 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()方法)。