我对我的项目有一个想法,我在这里使用 Ajax 作为前面,拉拉维尔作为后面。
例如,在处理图像时。
处理图像的步骤是这样的。
- 上传图片
- 验证图像
- 压缩图像
- 完成
因此,在用户端,我想显示报告每个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);
}
})
另一种方法是使用类似以下事件流的套接字:
发送上传事件 => 上传成功事件 => 用户收到成功消息 =>服务器继续对图像进行操作
希望这对你有帮助