- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Может кто - нибудь сталкивался или встречал готовое решение.
Как реализовать такую вещь на AJAX:
есть PHP функция, которая допустим открывает в папке файлы, пишет в них че нито и закрывает - как в скрипте который эту функцию запускает реализовать вывод во время выполнения процентной строки этого процесса (допустим записалось 5(6,7) файлов из 100), хотя бы без строки просто чтоб число показывалось. Подскажиет статью или принцип решеня.
подскажу, не секрет)
В чистом аяксе есть он лоад - если помудрить то можно не дожидаться полной загрузки. это раз. 2 - в пхп юзать flush().
вообще способов еще масса. например - регулярно выливать file put contents в какой нить левый файл и дополнительным потоком с setTimeout от клиента узнавать текущее значение, не трогая главный скрипт.. думкай
Chikey.ru, Дружище спасибо тебе огромное, но блин хотелось бы примера. так тяжело из аякс познаний только библиотека, которая скрипт вызывает по свойству html(может подскажешешь пару статей нужных).
если надо могу по аське(скайпу выйти на связь).проконсультируйте господа опытные прогеры))
ИМХО, для "реализации вывод во время выполнения процентной строки" - AJAX вообще не нужен - достаточно не завершать поток данных (собственно формируемый HTML), пока не отработался скрипт (записывающий файлы) и периодически "выплёвывать" в этот поток необходимые данные (те самые бегущие строки).
P.S. Реализацию не подскажу, т.к. PHP не знаю 🚬
и периодически "выплёвывать" в этот поток необходимые данные (те самые бегущие строки)
Курю, думаю, снова курю, поподробнее плиз.
Что-то типа такого. Выолнено на jsHttpRequest
Собсттна будет посылаться запрос скриптку script.php с параметром filenomber - это будет порядковый номер обрабатываемого файла. Если не будет возвращаться false, то считается, что файл успешно обработан и прогрессбар увеличится, иначе выполнение прервётся.
Бэкэнд писать не буду, лень, да и праздник, а на нетрезвую голову только js могу накидать.
Курю, думаю, снова курю, поподробнее плиз.
А я не курю, поэтому у меня времени на подумать в три (если судить по отквоченной формуле) раза больше... ;)
P.S. Сейчас поздно - завтра (даст бог) "набросаю" примерчик.
В общем есть один нюанс. Чисто технически это делается скорее всего так:
В скрипте php принудительно включаем буфер (ob_start), и в нужные моменты выплевываем туда данные - например значения процентов, разделенные чем-то (например ";"), используя ob_flush
Аяксовую часть делаем как обычно, например берем пример из википедии. Разница только в том - что данные нужно начать доставать из responseText когда readystate станет 3, а не 4, причем делать это нужно с заданной частотой (через setInterval как вариант), например 2 раза в секунду. Когда readystate станет 4, убиваем таймер и пишем 100%
Но вопрос - я не знаю тонкостей работы XmlHTTPRequest, есть вариант что он вернет readystate==4 как только буфер будет выплюнут первый раз. Это надо экспериментировать.
Можно конечно писать файл частями и вызывать скрипт многократно но это нерационаьлно как-то.
Flash таки лучше использовать
neolord добавил 10.05.2009 в 02:17
В общем все оказалось примерно так как я и сказал, только надо добавить после ob_flush() обычный flush()
А таймер даже не нужен, оказывается onreadystatechange срабатывает даже не при изменении статуса, а при изменении текста - но так тока в файрфоксе, в опере он нужен.
вот серверный код, который тупо тянет заданное время и показывает сколько времени прошло
клиентская часть (код глянете в сорцах) выглядит так:
awcms.ru/yu/test.html
мне даже самому нравится. Не знал что так можно.
Но: работает как надо только в файрфоксе.
В опере обновляет реже (ибо только по таймеру), и пока я не добавил ?random к запросу - кешировал.
В ие 6 не работает вообще.
В хроме тоже не работает (там не такой клевый XMLHttpRequest), но хотя бы в конце на 100% ставит - видимо, он получает все данные сразу и срать ему на буфер. И еще странно что chrome у меня идентифицирует себя как Mozilla Gecko, хотя вроде говорили что он на WebKit
IE7 у меня сам не работает :)
Если кто сможит это улучшить до кроссбраузерности - ПМ плз. Мне лень.
Спасибо всем буду разбираться.
Собственно говоря - вот (как и обещал): http://to.lcc.ru/test/
Ни какого аякса и работает под оперой, мозиллой и ИЕ.
P.S. Это не решение, а технология 🙄
Ну мое тогда:
вместо flush время отвремени делать выброс в файл 1.txt
...
file_put_contents('1.txt',"Ready ".$proc);
...
js:
function zz(){
$.get('1.txt',{},function (text){
$("#p").html(text);
});
setTimeout("zz",1000);
}
... возможны синтакс ошибки, не проверял