2013-03-15 2 views
0

Можно получить частичные результаты и написать в div из сообщения $ .ajax?

Мой код расслоение плотной

$('#submit').livequery('click', function(event) { 
    event.preventDefault(); 
    $('#loading').show(); 
    var myvar= $("#myvar").val(); 
    $.ajax({ 
     type: "POST", 
     url: "process.php", 
     cache: false, 
     data: ({'myvar':myvar}), 
     success: function(data){ 
      $('#loading').hide(); 
      $('#main_content').html(data); 
     }, 
    }); 
    return false; 
}); 

Код из process.php

function send($string = "") { 
echo $string; 
echo str_pad('', 4096)."\n"; 
@ob_flush(); 
@flush(); 
} 
for($i=1;$i<=10;$i++){ 
send($i); 
sleep(5); 
} 

можно показать на #main_content результат, как это:

  • показать 1 -> ждать -> показать 2 -> ждать .....

Прямо сейчас я получаю все результаты после процесса: 12345678910

+0

вы бы написать что-то для обработки данных который был восстановлен, поскольку PHP вернет все сразу. –

+0

если я открываю php-файл в браузере, я получаю результат, который я хочу (я использую функцию ob_flush) – gtht90

+0

Правильно, это потому, что PHP обрабатывает вывод - однажды отправленный клиенту через AJAX вам придется обрабатывать клиент если вы хотите сделать несколько вызовов AJAX. –

ответ

0

PHP-код запускается на сервере и, таким образом, не может влиять на поведение браузера на стороне клиента, как вы просите. Способ выполнить то, что вы хотите, - передать всю информацию из PHP в ваш браузер и обработать логику в jQuery или javascript. Отправить всю информацию и хранить ее в некоторых переменных/массивов и после POST, дробить информацию и отображать его в браузер с тайм-аута обратного вызова, как это:

setTimeout(function() { 
    // Do something after 5 seconds 
}, 5000); 
+1

Возможно, вы можете разбить его на стороне сервера и заставить его сделать новый звонок, чтобы получить ответ. Следующие 20 результатов, таких как Google или любая другая поисковая система делает. Это ограничило бы объем данных, который вам нужно будет хранить на стороне клиента, и не позволит вашему сайту замедляться и увязнуть. – War10ck

+1

вы можете сделать выборку внутри функции setTimeout: P ... просто зависит от того, что он хочет сделать ... но да, я согласен, что это хорошее соображение, чтобы иметь в виду ... + 1'd –

+0

Файл PHP получит некоторые данные и начнет делать некоторые действия, основанные на получении данных taht, я просто хочу вывести сообщение после завершения действия. – gtht90

Смежные вопросы