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 进度条的主要内容,如果未能解决你的问题,请参考以下文章