我有一个循环迭代的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)
您必须在长 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)