php - Yii框架异步请求

标签 php ajax asynchronous yii

我有一个执行 3 个任务的 ajax 请求:

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

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

这是糟糕的用户体验。

我希望用户将他的数据提交到我的 Controller ,之后他将收到“成功或失败的消息”。并且该过程将完全在服务器端进行,并且应该支持多 session 。

我怎样才能做到这一点?

最佳答案

@hakre 您提供的内容并没有减少用户等待响应的时间。

我找到了最好的解决方案: runactions extension for yii

此扩展可让您从 Controller 后台操作运行。 有多种使用方法。最适合我的情况是这个

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请求时,它由于某种原因无法工作。 所以我用了:

                         ERunActions::httpPOST($this->createAbsoluteUrl('Form/Submit'), array('to'=>'<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7914181015391d1614181017571a1614" rel="noreferrer noopener nofollow">[email protected]</a>', 'subject'=>'This is the subject'));

它的工作效果很好,但它不是理想的解决方案。

关于php - Yii框架异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005877/

相关文章:

python - 执行非阻塞请求? - Django

java - Spring @Async 或 EJB @Asynchronous 用于异步服务调用?

php - 如何使用 php 将包含印地语文本的表导出到 Excel 中?

php - 无法从 [object HTMLInputElement] 传递值

javascript - ajax调用未正确发送数据

javascript - jQuery - 在 .load 调用完成之前禁用 HTML 页面

PHP crc32() 只有数字

php - Yii CDbCriteria 从另一个相关对象的相关对象中选择一个字段

javascript - 如何使用 PHP 和 Ajax 实时读取文件

c# - ReportViewer 2010 不刷新异步回发