0

我正在使用 Jquery 和 php

我希望 php 向 ajax 调用发送响应并关闭连接,但不结束服务器上的脚本处理。

我不想要的是浏览器等待服务器端脚本的结束。

该脚本用于在服务器上生成文件,这需要很多时间。ajax 调用只是启动它,不需要知道脚本的结果或等到它结束。我想结束通话,因为浏览器可能会忘记它并认为它已经完成。

1) ajax 调用 2) 在检查调用(发送的安全和数据)之后响应“好的,我会做”之类的。3)让脚本在服务器端继续。

有没有办法做到这一点?

4

3 回答 3

0

我认为这很简单。

由 ajax 调用调用的 php 脚本中的正常过程是执行所有操作,然后返回任何数据,如下所示:

<?php
    get data passed on POST or GET

    process the data producing a result

    echo $result

    exit;
?>

您需要做的就是:

<?php
    echo 'OK';

    get data passed on POST or GET

    process the data

    exit;
?>
于 2013-09-13T15:56:57.317 回答
0

没有办法直接做到这一点。您与 Apache 或您使用的任何 HTTP 服务器(nginx、lightpd 等)有一个活动连接,而不是 PHP。

完成此类事情的最佳方法是设置“后台任务”。通常,您会将任务存储在某种数据库中,并有一个后台工作人员(可能是一个每隔几分钟执行一次脚本的 cron 作业)来检查并执行任何需要的工作。

于 2013-09-13T15:51:10.233 回答
0

我唯一能想到的就是在 PHP 中将工作分解为更小的部分。

console.log("Started");
$.ajax({
    url: "/path/to/script/file.php",
    dataType: "json",
    data: {"start":true}
    success: function(data) {
        if(data.status=="OK"){
            console.log("Continuing");
            $.ajax({
                url: "url: "/path/to/script/file.php",
                dataType: "json",
                data: {"continue":true}
                success: function(data) {
                    if(data.status=="OK"){
                        console.log("Completed");
                    }else{
                        console.log("Didn't Complete");
                    }
                }
            });
        }else{
            console.log("Didn't Continue");
        }
    }
});
于 2013-09-13T15:52:29.627 回答