我的目标是在Ajax中创建一个函数,将post数据发送到不同服务器上的PHP脚本。预期的结果是使PHP脚本从客户机断开连接,并在服务器的后台运行整个PHP脚本,从而允许用户自由导航,而不是让他们等待PHP脚本完成。我已经成功地将数据发送到PHP脚本,但是在断开与客户端的连接后,我无法让PHP脚本继续运行。我不想或需要的PHP脚本输出任何东西到任何其他脚本。我只需要它在后台运行。
我尝试过在PHP中使用ignore_user_abort(true)、header("Connection: close\r\n")和其他连接处理,但都没有成功。这是我实现所需功能的最新尝试。
发送脚本
<script>
function sendingRequest()
{
var form = document.getElementById("submit_change");
var var1 = document.getElementById('var1').value;
var var2 = document.getElementById('var2').value;
var var3 = document.getElementById('var3').value;
var dataString = 'var1='+ var1 + '&var2=' + var2 + '&var3=' + var3;
$.ajax({
type:"post",
url:"recievingScript.php",
data:dataString,
cache:false
});
form.submit();
return false;
}
</script>PHP脚本
<?php
ignore_user_abort(true);
//includes, uses, requires, establish db connection
$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
header("Access-Control-Allow-Origin: *");
header("Connection: close");
//Code to be run
//end script
?>成功:在Ajax post中,PHP脚本成功运行,并向调用PHP脚本的脚本发送一条成功消息。但是该脚本大约需要10秒才能运行,因此让用户等待脚本完成并不是一个好主意。任何建议都很感谢,谢谢!
发布于 2019-01-15 15:06:25
您可以设置所谓的后台工作程序。执行的函数将在“后台”完成,这意味着用户不必等到函数完全完成。然后,您可以公开一个路由/ Api来调用该函数。在laravel中,他们称其为可以排队的作业。
就我个人而言,除了开箱即用的Laravel之外,我没有任何设置后台工作人员的经验。但是你可以检查这些参考资料!
Class Worker PHP
doBackground PHP
https://stackoverflow.com/questions/54192732
复制相似问题