2013-11-29 4 views
6

У меня есть контроллер ajax, который перебирает цикл. Я хотел бы обновить индикатор выполнения после этого прогресса контроллера.
В принципе, мне просто нужно вывести $('.bar').css('width', $percent . '%').
Но все эти выходы просто накапливаются и отправляются после завершения функции.Symfony Ajax Progress Bar

Как обновить панель после каждого выхода?
Я уже пробовал flush() и ob_flush().

Использует ли Symfony другие буферы?

EDIT: Часть контроллера, Ouput кода JavaScript

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

Можете ли вы показать код, как вы делаете это в AJAX? – putvande

+0

Я добавил свой php-контроллер. На стороне javascript ничего нет. –

+0

Я не думаю, что это сработает, вызов AJAX вернет данные из PHP, когда это будет сделано, поэтому после цикла foreach. – putvande

ответ

3

Вы должны использовать сеанс запись близко() в PHP длительного действия.

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... 
} 
+0

Привет, спасибо за фрагменты и извините за задержку. Что именно я должен делать на myCheckAction()? Потому что все, что я хочу проанализировать, находится в myVeryLongAction() ... –

+0

Ок, я вижу, в myVeryLongAction() я устанавливаю переменную процента, а в myCheckAction() я ее получаю. Проблема в том, что есть разные вызовы myCheckAction, я не могу установить переменную. Единственным решением будет сеанс varibale, но из-за session_write_close это невозможно ... –

+0

Вы не можете установить переменную прямо в свой контроллер? YourClass {protected $ variable; public indexAction() {} ...}? – pbenard