вывод значения функции через равный интервал
Всем привет! Начал изучать JS вот.. но чего то успехов мало пока :(
есть блок в который php функция выводит число, которое постоянно меняется: <?php echo "<b>".sizeof(file($base))."</b>"; ?> при обновлении страницы число меняется. надо сделать чтобы число менялось с заданныем интервалом в 1 секунду, без перезагрузки страницы. понимаю что надо использовать setInterval но не меняется(( пробовал вот так: var number = "<?=sizeof(file($base))?>"; var msgelement = document.getElementById('userOnline').innerHTML=setInterval('number', 1000); число выводится но не меняется помогите пожалуйста.. измаялся уже. вторые сутки голову ломаю. |
<div id="userOnline"></div> <script type="text/javascript"> var number = 200; var msgelement = document.getElementById('userOnline') setInterval(function() {number+=100;msgelement.innerHTML=number}, 1000); </script> |
Deff, спасибо огромное за помошь, работает, только не так как я ожидал.
пример: sizeof(file($base)) - подсчитвает юзеров онлайн, заносит их в файл и потом выводит. открываем страницу в браузере - покажет 1 открваем ту же страницу в ДРУГОМ браузере покажет 2 НО при этом в первом браузере 1 на 2 не изменяется... как быть? UPD: вот функция подсчета юзеров //выделяем уникальный идентификатор сессии $id = session_id(); if ($id!=""){ //текущее время $CurrentTime = time(); //через какое время сессии удаляются $LastTime = time() - 180; //файл, в котором храним идентификаторы и время $base = DOC_ROOT.MODULES."/user_session.txt"; $file = file($base); $k = 0; for ($i = 0; $i < sizeof($file); $i++) { $line = explode("|", $file[$i]); if ($line[1] > $LastTime) { $ResFile[$k] = $file[$i]; $k++; } } for ($i = 0; $i<sizeof($ResFile); $i++) { $line = explode("|", $ResFile[$i]); if ($line[0]==$id) { $line[1] = trim($CurrentTime)."\n"; $is_sid_in_file = 1; } $line = implode("|", $line); $ResFile[$i] = $line; } $fp = fopen($base, "w"); for ($i = 0; $i<sizeof($ResFile); $i++) { fputs($fp, $ResFile[$i]); } fclose($fp); if (!$is_sid_in_file) { $fp = fopen($base, "a-"); $line = $id."|".$CurrentTime."\n"; fputs($fp, $line); fclose($fp); } } |
Цитата:
|
Цитата:
я вот выше привел полный код скрипта подсчета статистики |
Цитата:
|
Цитата:
а это разве не запрос с интервалом? функция объявлена, и вызывается с интервалом в 1 секунду. но я понять не могу почему не обновляет, ведь данные есть в функции.. и походу она не выполляется снова эта функция.. а просто выводится 1 раз в секунду то что уже было выведено. все, я понял теперь. логичное продолжение: как сделать запрос к файлу? сам ajax запрос я написать могу. не смогу распарсить файл js-ом.. подскажете? структура файла такая хэшID | время oecrgl7etos39s1ntercbh2s24|1356818703 2uc6oc0g2g2alv6cotbb8k1c85|1356818711 ... |
Цитата:
вы посмотрите выдачу HTML кода страницы - там чисто конкретная цифра - а не ява-скрипт функция |
Цитата:
собственно вопрос новый в моем посте выше :) продублирую: как сделать запрос к файлу? сам ajax запрос я написать могу. не смогу распарсить файл jscript-ом.. подскажете? структура файла такая хэшID | время oecrgl7etos39s1ntercbh2s24|1356818703 2uc6oc0g2g2alv6cotbb8k1c85|1356818711 |
Цитата:
Распарсить зная точно - не проблема |
Цитата:
мож просто считать количество строк? 1 строка -1 юзер там идет или количество хешей... для верности подсчета... |
cOAPerator,
Выдайте конкретный пример, пометьте цветом выделяемые данные 2-е - если файл длинный - более 100кб - лучше парсить на серве и выпарсенное данное вкладывать в файл с иным именем - его и читать Aяксом |
Код:
2uc6oc0g2g2alv6cotbb8k1c85|1356819742 то бишь 4 должно получиться.. файл маленький размер его в байтах.. |
Цитата:
|
cOAPerator,
Разделение меж строками перевод строки ? или ? Нужно считать кол- во строк ? |
Код:
2uc6oc0g2g2alv6cotbb8k1c85|1356819742 в данном случает должно получиться 4 строки считать не надо Разделение меж строками нету. там просто каждая новая строка это новый юзер. |
Цитата:
2uc6oc0g2g2alv6cotbb8k1c85|1356819742fp6onv96hjv3fsu1jvernm4544|1356819747t9fee2k4m43qr1e8c3tl71la30|1356819750tj6m9qijcjp9emq3n5f4vfu7o7|1356819756 число знаков в 2uc6oc0g2g2alv6cotbb8k1c85|1356819742 - везде идентично ? |
Вложений: 1
Цитата:
файл приложил в аттаче, который парсить надо число знаков везде 32 - это обыкновенный хэш в 32 байта |
<div id="userOnline"></div> <script type="text/javascript"> var number = 200; var msgelement = document.getElementById('userOnline'); msgelement.innerHTML=number; setInterval(function() { function() { //Тут Аякс запрос //..................... //Пусть data - Данные из файла number=data.split("|").length-1; msgelement.innerHTML=number } //Конец Аякс запроса }, 1000); </script> |
Цитата:
UPD: НЕ РАБОТАЕТ! |
Cтандартно для чатов - скрипт делает Аякс запросы не чаще 10-12 сек, дабы избежать лишней нагрузки
Поскольку сама обработка файла браузером может занимать больше секунды К примеру страница грузицо в среднем секунд 20-30, смысла делать смену цифр существенно быстрее вроде нет |
снова не РАБОТАЕТ!
number=data.split("|").length-1; - делает новый массив и считает количество элементов массива, НО так как у меня файл такого вида: 2uc6oc0g2g2alv6cotbb8k1c85|1356819742 fp6onv96hjv3fsu1jvernm4544|1356819747 t9fee2k4m43qr1e8c3tl71la30|1356819750 tj6m9qijcjp9emq3n5f4vfu7o7|1356819756 и считать надо только то что выделено жирным, то получатся не верный ответ. и 2 проблема - все время выводит 0. сейчас код такой: setInterval(function() { //Тут Аякс запрос request = new XMLHttpRequest(); request.open("GET", "user_session.txt", true); request.send(null); //Пусть response - Данные из файла var response = request.responseText; number=response.split("|").length; var msgelement = document.getElementById("userOnline"); msgelement.innerHTML=number; //Конец Аякс запроса }, 1000); |
<div id="userOnline"></div> <script type="text/javascript"> //Ссылка на подгружаемый файл var Link='http://cOAPerator.ru/user_session.txt'; var number = 6; var msgelement = document.getElementById('userOnline'); msgelement.innerHTML=number; setInterval(function() { function getXmlHttp(){var xmlhttp;try{xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}catch(E){xmlhttp=false}}if(!xmlhttp&&typeof XMLHttpRequest!='undefined'){xmlhttp=new XMLHttpRequest()}return xmlhttp} var xmlhttp=getXmlHttp();xmlhttp.open('GET',Link+'?'+Math.random(),true);xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4){if(xmlhttp.status==200){ number=xmlhttp.responseText.split("|").length-1; msgelement.innerHTML=number }}};xmlhttp.send(null); }, 1000); </script> |
Deff,
number=xmlhttp.responseText.split("|").length-1; -эта строка не правильно считает и все время висит число 6 и не меняется. |
Цитата:
var Link='http://cOAPerator.ru/user_session.txt' ==================== поставьте вместо number=xmlhttp.responseText.split("|").length-1; msgelement.innerHTML=number Это alert(xmlhttp.responseText) и посмотрите - меняется ли файл |
Цитата:
|
Цитата:
Цитата:
|
действительно. не заметил.
|
ребят объясните мне о чем вы ща разговариваете? ))) ппц я нуб))
Deff, так как посчитать то? чего то я никак не пойму.. из за того что в конце каждой строки нет этого долбаного разделителя | не считается правильно.. dmitriymar, содержание файла принимается нормально. |
Deff, пардон, походу я скосячил немного. попробовал алерт поставить так он ниче не выдает. пустое окно алерта.
то бишь данные не приходят. а ссылка обязательно должна быть полная - http://cOAPerator.ru/user_session.txt или можно относительную поставить - /user_session.txt ??? с относительной ниче так же не выдает.. но вот что интересно, когда стоит number=xmlhttp.responseText.split("|").length-1; msgelement.innerHTML=number то показывает 1 юзер.. |
Цитата:
Проверьте файл вставкой ссылки в окно браузера Ps: файл должен быть с того же домена, что и страница со скриптом (Иначе Аякс не работает! |
Цитата:
че делать? |
cOAPerator,
вставьте ссылку на файл в браузер - должен быть текст в окне |
Deff,
ура! прогресс! значит я поставил относительный полный путь /user_session.txt НО, в запросе поставил false вот так: request.open('GET','modules/user_session.txt', false); и о чудо, вышла первая строка из файла тока я не понял почему при асинхронном запросе контент с файла не грузится а при синхронном нормально его загружает... странно... |
но считает по прежнему не правильно... зашел с 2 браузеров, а показывает 3 онлайн
|
Цитата:
|
Цитата:
когла 1 онлайн: gr9b06sos303ba7ihn209aqsh7|1356906773 когда 2 онлайн gr9b06sos303ba7ihn209aqsh7|1356907339 4b8c8r6looq5rtnq62n4m6e7q2|1356907329 когда 3 человека онлайн gr9b06sos303ba7ihn209aqsh7|1356907339 4b8c8r6looq5rtnq62n4m6e7q2|1356907329 loht91nuuj4i5v0is2nn3nrnf7|1356907396 надо чтобы считало количество в 1 колонке: -----колонка 1------------|--колонка 2--- gr9b06sos303ba7ihn209aqsh7|1356907339 4b8c8r6looq5rtnq62n4m6e7q2|1356907329 loht91nuuj4i5v0is2nn3nrnf7|1356907396 |
xmlhttp.responseText.split("|").length-1;
должно работать Пример var a="gr9b06sos303ba7ihn209aqsh7|1356907339\ 4b8c8r6looq5rtnq62n4m6e7q2|1356907329\ loht91nuuj4i5v0is2nn3nrnf7|1356907396"; alert(a.split("|").length-1) |
xmlhttp.responseText.split("|").length-1;
должно работать Пример var a="gr9b06sos303ba7ihn209aqsh7|1356907339\ 4b8c8r6looq5rtnq62n4m6e7q2|1356907329"; alert(a.split("|").length-1) var a="gr9b06sos303ba7ihn209aqsh7|1356907339\ 4b8c8r6looq5rtnq62n4m6e7q2|1356907329\ loht91nuuj4i5v0is2nn3nrnf7|1356907396"; alert(a.split("|").length-1) |
Deff, ну да, у вас в конце каждой строки обратный слеш стоит, а у меня его нету...
и я не понял почему при асинхронном запросе контент с файла не грузится а при синхронном нормально его загружает? |
Часовой пояс GMT +3, время: 14:48. |