вывод значения функции через равный интервал
Всем привет! Начал изучать 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, время: 02:12. |