Можно ли на ajax получать информацию по мере ее поступления?

12
lutskboy
На сайте с 22.11.2013
Offline
173
315

Привет

есть скрипт php . допустим этот. 

ob_start();

// Генерация данных и их вывод с помощью flush()
for ($i = 1; $i <= 10; $i++) {
    echo "Это сообщение номер $i.<br>";
    flush();
    ob_flush();
    sleep(1); // Задержка для демонстрации
}

ob_end_flush();

он выводит инфу постепенно. в браузере. каждую сек.

как сделать такой же вывод постепенно но отправкой ajax

                $(function(){
                        $.post('script.php',{name:'ivan'}, function(d){
                                
                        });
                });

етот код ждет пока все выполнится. 

можно конечно в php сохранять в файл. а на js setinterval использовать. но хотелось бы пока без етого

Ilya74
На сайте с 12.06.2008
Offline
354
#1
lutskboy :
как сделать такой же вывод постепенно но отправкой ajax

Через цикл. Посылайте запросы через js в цикле.

А ещё не понятно, зачем вам метод post в данном случае.

⚡️ Хостинг и VPS в Москве, Новосибирске, Нидерландах, США ( https://x5x.host )
L
На сайте с 10.02.2015
Offline
222
#2
Вы убьете php слипами
lutskboy
На сайте с 22.11.2013
Offline
173
#3
Ilya74 #:

Через цикл. Посылайте запросы через js в цикле.

А ещё не понятно, зачем вам метод post в данном случае.

ето просто пример. можно и гет

lutskboy
На сайте с 22.11.2013
Offline
173
#4
livetv #:
Вы убьете php слипами

не так часто ети операции будут делаться. только в админке

D
На сайте с 05.02.2022
Offline
32
#5
Самый распространенный путь - это именно сет интервал для js.

А скрипт php лучше делать не длинным по времени, а хранить промежуточную информацию где-то, например, в базе данных. И скрипт php запускать по крону каждые 5 минут например. То есть два файла - один работает и заносит инфу в базу, а второй отдает инфу по аджакс беря её из базы.

Если же требуется непрерывная передача, то лучше смотреть в сторону сокетов.
W1
На сайте с 22.01.2021
Offline
289
#6
lutskboy :

етот код ждет пока все выполнится. 

можно конечно в php сохранять в файл. а на js setinterval использовать

Нужно использовать setInterval или setTimeout в цикле. И отправку ajax подправить:

{name:'ivan', id:id}
Мой форум - https://webinfo.guru –Там я всегда на связи
Snake800
На сайте с 02.02.2011
Offline
216
#7
Может, если результат DOMу не важен, то не париться и сделать через iframe?
<ifarme src="script.php">?
S3
На сайте с 29.03.2012
Offline
302
#8

Вообще-то технологии нужно применять согласно их назначению, а не просто по глупым советам. 

Читаем заголовок темы - "... по мере поступления..." А потом читаем ответы и ужасаемся  seniority местных гуру... Только один человек  дал ответ в правильном направлении тут, ему респект, остальное... не буду даже комментировать.

AJAX НЕ умеет выдавать информацию ПО МЕРЕ ПОСТУПЛЕНИЯ и НЕ ПРЕДНАЗНАЧЕН для этого! Он служит для АСИНХРОННОЙ загрузки данных БЕЗ перезагрузки всей страницы!!! Вешать его на таймауты и интервалы - значит ждать на форуме следующую тему - "почему мой сайт не работает/тормозит, я же сделал  как мне сказали"

Правильно - сокет, который слушает определенные события и выдает информацию .  Появился новый коммент - обновили инфуб=, пришло письмо от верификации - поменяли статус юзера в браузере. Но не дергать по тайминтервалу  скрипт!!!

Лучше вообще не делать, чем так.

M3
На сайте с 09.02.2022
Offline
24
#9
Sly32 #:

Вообще-то технологии нужно применять согласно их назначению, а не просто по глупым советам. 

Читаем заголовок темы - "... по мере поступления..." А потом читаем ответы и ужасаемся  seniority местных гуру... Только один человек  дал ответ в правильном направлении тут, ему респект, остальное... не буду даже комментировать.

AJAX НЕ умеет выдавать информацию ПО МЕРЕ ПОСТУПЛЕНИЯ и НЕ ПРЕДНАЗНАЧЕН для этого! Он служит для АСИНХРОННОЙ загрузки данных БЕЗ перезагрузки всей страницы!!! Вешать его на таймауты и интервалы - значит ждать на форуме следующую тему - "почему мой сайт не работает/тормозит, я же сделал  как мне сказали"

Правильно - сокет, который слушает определенные события и выдает информацию .  Появился новый коммент - обновили инфуб=, пришло письмо от верификации - поменяли статус юзера в браузере. Но не дергать по тайминтервалу  скрипт!!!

Лучше вообще не делать, чем так.

так есть такая технология, называется "long polling", работает как раз через AJAX и долгое ожидание ответа, самое то для ТС)

S3
На сайте с 29.03.2012
Offline
302
#10
master32 #:

так есть такая технология, называется "long polling", работает как раз через AJAX и долгое ожидание ответа, самое то для ТС)

LP да, более правильное решение, там уже сохраняется консистентность. Правда и нагрузка на сервак резко возрастет.  С сокетами нагрузка меньше, они работают через TCP и не будет создаваться масса коннекшенов как с ЛП. Ну и опять же сокет не требует реквеста как в случае с ЛП

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий