Я пытаюсь отправить данные для просмотра с контроллера в 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()