Я пытаюсь отправить данные для просмотра с контроллера в PHP CodeIgniter.
Я ob_flush
функцию PHP через ajax
и используя ob_flush
для отправки данных, но проблема в том, что все вызовы flush объединяются в более поздние вызовы.
Например: первый сброс отправки 1
й тайм-код отправки 12
вместо 2
.
Это мой контур контроллера.
foreach ($csv_array as $row) { ob_start(); $varint=$varint+1; echo $varint; $content = ob_get_contents(); ob_end_clean(); echo $content; ob_flush(); flush(); while (ob_get_level() > 0) { ob_end_clean(); } }
Мой вызов ajax:
document.getElementById('upld').onclick = function() { xhr = new XMLHttpRequest(); var mydata = new FormData($('#form')[0]); xhr.open("POST", base_url+"index.php/controller/function", true); xhr.onprogress = function(e) { console.log(e.currentTarget.responseText); } xhr.onreadystatechange = function(data='') { if (xhr.readyState == 4) { console.log(myArr); } } xhr.send(mydata); };
Документация для flush()
говорит:
flush () не сможет переопределить схему буферизации вашего веб-сервера и не влияет на буферизацию на стороне клиента в браузере. Он также не влияет на механизм буферизации вывода пользовательского пространства PHP. Это означает, что вам придется вызывать оба ob_flush () и flush (), чтобы очистить выходные выходные буферы, если вы их используете.
В вашем случае вы можете заменить flush()
на ob_flush()
поскольку я не думаю, что вы хотите очистить выходные буферы системы.
Как немного дополнительно этот код:
$content = ob_get_contents(); ob_end_clean();
Может быть сконденсировано в один вызов функции, который является псевдонимом для обеих предыдущих команд:
$content = ob_get_clean();
Документация для ob_get_clean()