如何向 Ajax 发送响应,但保留进程 PHP 脚本



我对我的项目有一个想法,我在这里使用 Ajax 作为前面,拉拉维尔作为后面。

例如,在处理图像时。

处理图像的步骤是这样的。

  1. 上传图片
  2. 验证图像
  3. 压缩图像
  4. 完成

因此,在用户端,我想显示报告每个PHP脚本都完成了任务。

例如,当 PHP 完成上传图像时,我想向用户返回上传已完成的消息,然后下一步是验证图像等等......

我所知道的是,返回对 AJAX 的响应是使用

public function upload_image(Request $request){
//script to upload image...
return response()->json([
'status' => 'true',
'state' => '1',
'msg' => 'upload image'
]);
//script to checking images and more...
}

并且肯定这将停止返回后继续处理。

有没有办法将响应返回给用户,但继续处理 PHP 脚本?

不,没有办法返回成功并继续执行脚本。

最常见的方法是使用队列和作业,在此处查看更多内容: https://laravel.com/docs/5.8/queues

另一种方式取决于应用逻辑。如果您确定用户在成功后会留下来,则可以拆分您的请求,并在上传图像时返回图像标识符并做出另一个响应来对其进行操作,例如:

$.ajax({
url: '/upload',
data: {...},
success: function(res){
compressionRequest(res.image);
}
})

另一种方法是使用类似以下事件流的套接字:

发送上传事件 => 上传成功事件 => 用户收到成功消息 =>服务器继续对图像进行操作

希望这对你有帮助

最新更新