首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在AJAX响应发送到Yii2中的用户后继续脚本?

如何在AJAX响应发送到Yii2中的用户后继续脚本?
EN

Stack Overflow用户
提问于 2016-07-11 13:20:15
回答 2查看 925关注 0票数 0

在收到AJAX请求后,我希望在PHP脚本完成之前向用户提供反馈,因为这需要很长时间。

我认为send()对象的yii\web\Response方法是为此创建的,因此我在控制器操作中尝试了以下操作:

代码语言:javascript
复制
Yii::$app->response->format = Response::FORMAT_JSON;
Yii::$app->response->data = [ 'success' => $someData ];
Yii::$app->response->send();

// code that takes long
sleep(5);

响应被发送,但在睡眠5秒之后。

同样幸运的是:

代码语言:javascript
复制
ob_start();
echo json_encode([ 'success' => $someData ]);
header('Connection: close');
header('Content-Type: application/json');
header('Content-Length: '.ob_get_length());
ob_end_flush();
flush();

// code that takes long
sleep(5);

我对在控制器操作中工作的最后一段代码没有任何信心,但我在第一次.我遗漏了什么?

编辑:我正在使用nginx + PHP_FPM

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-14 02:04:38

PHP_FPM提供了fastcgi-finish-request()

此函数将所有响应数据刷新到客户端并完成请求。这允许在不打开与客户端的连接的情况下执行耗时的任务。

代码语言:javascript
复制
Yii::$app->response->format = Response::FORMAT_JSON;
Yii::$app->response->data = [ 'success' => $someData ];
Yii::$app->response->send();

fastcgi-finish-request();

// code that takes long
sleep(5);
票数 0
EN

Stack Overflow用户

发布于 2016-07-12 08:16:32

我认为您要搜索的是长轮询

下面是PHP+jQuery上长轮询实现的好示例

https://github.com/panique/php-long-polling

下面是相关的主题,并对该领域的不同技术(包括长轮询)进行了深入的说明- What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?

此外,您还可以查看本视频教程。

https://www.screenr.com/SNH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38308068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档