Symfony Ajax 进度条

Posted

技术标签:

【中文标题】Symfony Ajax 进度条【英文标题】:Symfony Ajax Progress Bar 【发布时间】:2013-12-15 15:03:35 【问题描述】:

我有一个循环遍历的 ajax 控制器。 我想在此控制器进度之后更新进度条。 基本上,我只需要输出一个$('.bar').css('width', $percent . '%')。 但所有这些输出只是在函数完成后累积并发送。

如何在每次输出后更新栏? 我已经尝试过flush()ob_flush()

Symfony 是否使用其他缓冲区?

编辑:输出 javascript 的控制器的一部分

$total = count($results);
foreach ($results as $result) 
    $count++;
    echo '<script>$(\'.bar\').css(\'width\', \'' . (int)($count / $total * 100) . '%\');</script>';

【问题讨论】:

你能展示一些代码,你是如何在 AJAX 中做到这一点的吗? 我添加了我的 php 控制器。 javascript 方面没有任何内容。 我认为这行不通,AJAX 调用完成后会从 PHP 中取回数据,所以在 foreach 循环之后。 你认为没有办法做到这一点吗? 您应该在长 ajax phpaction 中使用 session_write_close... 这样,您可以使用另一个 ajax 循环来检查进度。 【参考方案1】:

您必须在长 php 操作中使用 session-write-close()。

JS:

var isInProgress = false;
function veryLongImport()

     isInProgress = true;
     checkfx();
     $.ajax(
            type: "GET",
            url: /myverylongueactionPath ,
            async : true,
            cache: false,
            dataType:'html',
            success: function(data),
            error: function()  ,
            complete: function()
                isInProgress = false;
            
        );


function checkfx()

    if( isInProgress != false )
    
        $.ajax(
            type: "GET",
            url: /mycheckpath ,
            async : true,
            cache: false,
            dataType:'html',
            success: function(data)
                 makeYourProgressBarGrowHere();
             ,
            error: function()  ,
            complete: function()
                checkfx();
            
        );
     else  

PHP 控制器:

public function myVeryLongAction($id)

   session_write_close();
   ... code ...


public function myCheckAction()

    ...code...

【讨论】:

您好,感谢您的 sn-ps,抱歉耽搁了。我到底应该在 myCheckAction() 上做什么?因为我要分析的只是在 myVeryLongAction() ... 好的,我明白了,在 myVeryLongAction() 中,我设置了一个百分比变量,在 myCheckAction() 中,我明白了。问题是 myCheckAction 有不同的调用,我无法设置变量。唯一的解决方案是会话变量,但由于 session_write_close,这是不可能的...... 您不能直接在控制器中设置变量吗? YourClass 受保护的 $variable;公共 indexAction()... ? 我试过了,但是在 myCheckAction() 上,变量总是有默认值,可能是因为这是与 myVeryLongAction() 不同的调用。我也尝试使用没有 session_write_close() 的会话变量,该变量设置为 100,即最终值,但我没有所有步骤... 我对控制器中的变量很愚蠢,它不会保存:/ ...另一种方法是将变量存储在数据库或临时文件中...我使用此函数来获取现实中日志文件的最后一行...

以上是关于Symfony Ajax 进度条的主要内容,如果未能解决你的问题,请参考以下文章

如何在ajax文件上传中显示进度条

ajax页面加载进度条插件

带有大列表的 Ajax 进度条

Ajax实现带进度条的文件上传

如何在加载时显示进度条,使用ajax

Ajax表单上传进度条