首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii框架异步请求

Yii框架异步请求
EN

Stack Overflow用户
提问于 2012-04-04 06:20:16
回答 2查看 4.7K关注 0票数 2

我有ajax请求,执行3项任务:

  • 保存模型(DB)
  • 发送电子邮件
  • 给出成功或失败的信息。

因为这次任务太费时了。用户可以等待最多20秒的响应(成功或失败的消息)。如果用户关闭浏览器,则在用户当前进程的一个操作中停止。

这是糟糕的用户体验。

我希望用户提交他的数据给我的控制器,然后他将得到“成功或失败的消息”。整个过程将完全在服务器端进行,并且它应该支持多个会话。

我怎么能这么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-05 12:43:12

@hakre您给出的内容不会减少用户等待响应的时间。

我找到了最好的解决方案:易的运行扩展

这是扩展,允许您从控制器后台操作运行。有几种方法可以使用它。对我的案子来说最好的是这个

代码语言:javascript
复制
public function actionTimeConsumingProcess()
{
    if (ERunActions::runBackground())
    {
       //do all the stuff that should work in background
       mail->send()
    }
    else
    {
        //this code will be executed immediately
        //echo 'Time-consuming process has been started'
        //user->setFlash ...render ... redirect,
    }
  //User information
  echo "Submit Success!"
}

而它的工作却没有ajax请求,当我提出ajax请求时,由于某种原因它不能工作。所以我用:

代码语言:javascript
复制
                         ERunActions::httpPOST($this->createAbsoluteUrl('Form/Submit'), array('to'=>'mail@domain.com', 'subject'=>'This is the subject'));

它的作用很大,但它并不是解决这一问题的理想方法。

票数 1
EN

Stack Overflow用户

发布于 2014-07-29 17:48:01

运行操作扩展的问题是,它只适用于未经身份验证的用户,您可以使用yii 回程扩展,但这需要使用某种非阻塞会话存储,例如CHttpDbSession。我仍然在寻找正确的方法来做这件事。我发现最好的选择之一是运行服务器后台作业:

代码语言:javascript
复制
/usr/bin/php -q longProcess.php > /dev/null 2>&1 &

然而,我仍然需要知道如何在cmd行中传递控制器和操作,并允许yii实际使用它,类似于

代码语言:javascript
复制
/usr/bin/php -q yii-index.php controller action > /dev/null 2>&1 &

更新:--我发现了最好的方法是使用yii控制台应用程序并将其作为后台作业运行。下面的链接帮助了很多人:

Yii cron就业

我现在使用这段代码,它运行得很好:

代码语言:javascript
复制
exec("nohup /protected/yiic mycommand /dev/null 2>&1 &")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10005877

复制
相关文章

相似问题

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