| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Progress Bar |
| Автор: NetFlame 7.3.2008, 00:09 |
| Здравствуйте. Есть скрипт, который выполняется по времени минут 5. Во время его выполнения, нужно создать прогресс-бар, который будет по центру монитора пользователя отображать процесс его выполнения. Искал по инету - подходящего ничего не нашел... Скорее всего, тут надо использовать AJAX: скрипт посылает прогресс-бару степень своего выполнения, а прогресс-бар её отображает. Может быть есть уже такой скрипт, или инфа как его сделать? Заранее спс. |
| Автор: solenko 7.3.2008, 00:35 |
| NetFlame, посылать процент не получится. Клиент может переодически запрашивать процент выполнения. Как его определять -- вам виднее. Как вариант -- запись процента в временный файл. Другой скрипт занимается тем что этот процент читает и отдает клиенту. |
| Автор: SelenIT 7.3.2008, 01:17 |
| Почему же - как раз в этом случае можно и посылать. Перед началом работы, например, отдать клиенту JS-функцию display_progress (которая и будет заниматься перерисовкой всего, что надо), и время от времени выплевывать куски вида <script>display_progress(новый_процент)</script>, не забывая делать после этого flush(). Конечно, это в предположении, что ничего другого скрипт не выводит - только делает какую-то чисто серверную рутину типа обновления очень большой базы... |
| Автор: NetFlame 7.3.2008, 10:18 |
| У меня не очень хорошо с Java, может быть есть какие-то примеры? |
| Автор: MoLeX 7.3.2008, 10:22 |
| NetFlame примеры с Явой в соответсвующим разделе... Добавлено через 11 минут если нет вопросов по части РНР, то тему закрю. |
| Автор: SelenIT 7.3.2008, 12:52 |
| В простейшем случае можно обойтись и без JS - вместо блоков скрипта "выплевывать" палочки "|", по одной - 100 штук. Чтобы браузер не тупил с их отображением, можно выводить так: 1 палочка - 256 пробелов (а то IE, ЕМНИП, часто не любит перерисовывать страницу ради одного принятого символа). Получится элементарный текстовый прогрессбар. Если его малость стилизовать через CSS и выводить в frame подходящего размера - такое можно будет на первых порах (до лучшего освоения JS ;) использовать на практике... |
| Автор: SelenIT 7.3.2008, 14:12 |
| flashaa, куски не запроса, а ответа - который формируется постепенно и очень долго... |
| Автор: awers 7.3.2008, 15:00 |
| flush(); - прекрасно отдает кусочки, которые прикрасно по одному отображает браузер. проверено. немного офтопа по js могу посоветовать использовать jQuery. |
| Автор: flashaa 7.3.2008, 15:28 | ||
SelenIT, да, ответа. Я это имел в виду.
Браузер отображает. Но как - зависит от браузера. По-крайней мере когда выводятся к примеру куски html-кода, то он их кеширует и выдает по мере "построения" сайта из html-кода. Как он работает с текстом - тоже его сугубо личное дело. Не советовал бы на это полагаться. Но если я не прав, то можно пример такого скрипта. Мы говорили про обычный запрос, теперь давайте ближе к делу, а именно - AJAX. Как надо работать на стороне JS, чтобы принять разделенный запрос? Можно код? Не видел других вариантов, кроме как обработка полученного ответа на событие получения ответа. |
| Автор: SelenIT 7.3.2008, 15:52 |
| Я про AJAX не говорил, я как раз описывал простейшую синхронную альтернативу. Более того, я вообще сомневаюсь в возможности кроссбраузерной реализации затяжного AJAX-ответа (где-то по статусу loading вроде и есть доступ к данным, но вроде не везде, к тому же Опера, по-моему, дает серверу всего 3 секунды на ответ - не уверен, специально не исследовал, но какие-то обрывки с других форумов в голове остались;). С AJAXом, конечно же, лучше работать традиционно - долгоиграющий скрипт пусть работает вообще без вывода в фоновом режиме, а AJAX по таймеру опрашивает состояние процесса на сервере и отображает прогресс на момент каждого запроса... |
| Автор: solenko 7.3.2008, 15:55 |
| SelenIT, в варианте со скриптом -- разве скрипт начнет интерпретироваться до того как будет получен полностью? В варианте с просто отдачей контента мне удалось добится результата только в FF |
| Автор: flashaa 7.3.2008, 16:02 |
На практике не так. А если б и было так, то это серьезный баг, который сразу бы исправили. Таймаут-то xmlhttprequest'у можно выставить произвольный по документации. http://ru.wikipedia.org/wiki/XMLHttpRequest |
| Автор: SelenIT 7.3.2008, 16:50 | ||
С пробелами "для массовки" или без них? Это хорошо, возможно, мне запомнился баг какой-то конкретной древней версии. Но все равно с обработкой затяжных ответов много нетривиальных браузероспецифичных нюансов. |
| Автор: solenko 7.3.2008, 17:11 |
| SelenIT, пробовал с пробелами (~50-ти в span'е) |
| Автор: NetFlame 7.3.2008, 21:06 |
| Люди, живые примеры есть? Добавлено через 1 минуту и 40 секунд P.S. Сам прогрессбар я нашел как сделать, а вот чтобы там реальная информация отображалась - .... |
| Автор: awers 7.3.2008, 23:37 | ||
|