Symfony Ajax进度条

6 css php ajax jquery symfony

我有一个循环迭代的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>';
}
Run Code Online (Sandbox Code Playgroud)

Pim*_*Web 4

您必须在长 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 { }
}
Run Code Online (Sandbox Code Playgroud)

PHP 控制器:

public function myVeryLongAction($id)
{
   session_write_close();
   ... code ...
}

public function myCheckAction()
{
    ...code...
}
Run Code Online (Sandbox Code Playgroud)