我正在使用 Jquery 和 php
我希望 php 向 ajax 调用发送响应并关闭连接,但不结束服务器上的脚本处理。
我不想要的是浏览器等待服务器端脚本的结束。
该脚本用于在服务器上生成文件,这需要很多时间。ajax 调用只是启动它,不需要知道脚本的结果或等到它结束。我想结束通话,因为浏览器可能会忘记它并认为它已经完成。
1) ajax 调用 2) 在检查调用(发送的安全和数据)之后响应“好的,我会做”之类的。3)让脚本在服务器端继续。
有没有办法做到这一点?
我认为这很简单。
由 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;
?>
没有办法直接做到这一点。您与 Apache 或您使用的任何 HTTP 服务器(nginx、lightpd 等)有一个活动连接,而不是 PHP。
完成此类事情的最佳方法是设置“后台任务”。通常,您会将任务存储在某种数据库中,并有一个后台工作人员(可能是一个每隔几分钟执行一次脚本的 cron 作业)来检查并执行任何需要的工作。
我唯一能想到的就是在 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");
}
}
});