Проблема с setTimeout();

Статус
В этой теме нельзя размещать новые ответы.

axper

Новичок
Проблема с setTimeout();

Всем привет. Нашел нужный мне код, добавил в свой скрипт и он перестал работать.
Точнее не работает функция
PHP:
setTimeout();
. Мне нужно чтобы каждые n секунд вызывалась функция
PHP:
doLoad();
.
Я выложил основной код, может кто-нибудь увидит неправильную строчку.
PHP:
<script>  
var request;  
function doLoad()   
{
  	var url = 'ajaxsearch.php';
            if (window.XMLHttpRequest)   	
           {
  		request = new XMLHttpRequest();
  		request.onreadystatechange = processRequestChange;
  		request.open("GET", url, true);
  		request.send(null);
  	}
  	else if (window.ActiveXObject)
   	{
  		var url = 'ajaxsearch.php';
  		request = new ActiveXObject("Microsoft.XMLHTTP");
  		if (request)
		{
  			request.onreadystatechange = processRequestChange;
  			request.open("GET", url, true); 
 			request.send();
  		} 
 	}
  }  

function processRequestChange() 
{
  	var responseHTML = document.getElementById('responseHTML');
  	if (request.readyState == 4)
  	{
  		responseHTML.innerHTML = request.responseText;
  	} 
}

 function Update()
{
  	doLoad();
  	setTimeout("Update(url)",1000);
}
</script>
<body onLoad="Update()">
<span id="responseHTML"></span>
</body>
Заранее Благодарю.
 

Апокалипсис

тех дир matras.ru
axper
Формат твоего кода это неуважение к участникам форума, и вряд ли кто - то тебе поможет тут. Нажми кнопку "Редактировать" и отредактируй свой код, чтобы не было все так слитно.
 

axper

Новичок
Апокалипсис
Прошу прощения. Я не специально так записал, случайно нажал "Сохранить".
 

axper

Новичок
Если я вызываю отдельно с помощью <button OnClick='doLoad()'>OK</button> , то всё без проблем работает.

PHP:
function Update()
{
         doLoad();
             alert("aaa");
         setTimeout("Update(url)",1000);
             alert("aaa");
}
и в первом и во втором случае alert(); работает только при загрузке страницы, но после перезагрузки функцией setTimeout(); выдается ошибка.
 

axper

Новичок
Апокалипсис
Спасибо.очень помог.
Но у меня возник еще один вопрос...

Файл ajaxsearch.php выполняет такой процесс

PHP:
$file = file("messageы.txt");
for($i=0;$i<count($file);$i++)
{
     echo $file[$i]."<br>";
}
Функция doLoad(); нужна чтобы каждые n секунд обращалась к файлу ajaxsearch.php и тем самым выводила новые записи в файле в messages.txt, но при каждой перезагрузке функцией setTimeout(); выводится та запись, которая выводилась при первой занрузке страницы. В чем может быть причина?:confused:
 

axper

Новичок
Линка
а как сделать,чтобы каждый раз страница обновлялась, а не выводила кешированные данные?
 

BRat

o_0
axper

$file = file("messageы.txt");
for($i=0;$i<count($file);$i++)
{
echo $file[$i]."<br>";
}

код выводит все записи из файла, а не только новые
 

axper

Новичок
BRat
да, но если в файле messages.txt появятся новые записи, то при перезагрузки страницы функцией setTimeout(), эти новые данные не выведутся, пока вручную не перезагружу страницу.
 

BRat

o_0
axper
в doLoad выведи alert('1'); если setTimeout выполняется он должен каждую секунду появляться

и setTimeout(Update,1000)
 

axper

Новичок
BRat
alert(1) выводится, но данные не обновляются.выводятся кешированные данные.
 

BRat

o_0
axper
какое-то странное у тебя кеширование...

var url = 'ajaxsearch.php?rnd=' + Math.random();
пробуй
 

axper

Новичок
BRat
Спасибо. помогло.=)
А можно ли сделать так, чтобы не выводилось каждый раз всё содержимое файла messages.txt, а в <span id="responseHTML"></span> добавлялись новые сообщения?
 

Never die

Новичок
можно, сохраняй какой-нибудь идентификатор (к примеру номер последней загруженной строки) после этого, передавай его в функцию doLoad, а в ajaxsearch.php выбирай из файла строки после последней выбранной и новый идентификатор.

К отображеному содержимому добавляешь новое, меняешь старый идентификатор на новый.

Впринципе такой вот алгоритм
 

axper

Новичок
Never die
Дело в том,что с Ajax связываюсь впервые и мало что о нем знаю.
Я пробовал сохранять колличество строк из messages.txt в како-нибудь <input type=hidden>, но для этого приходилось создавать в ajaxsearch.php к примеру:

PHP:
if($act =='loadLines')
    echo count(file('messages.txt'));

идентичные doLoad и processRequestChange функции, где doLoad_2 будет вызывать файл ajaxsearch.php?act=loadLines , а processRequestChange_2 будет записывать результат в <input type=hidden>. Но как я знаю,слишком большой код, медленнее работает. Может есть какой-нибудь другой вариант?
 

Never die

Новичок
смотри, все просто

у тебя я так понимаю сообщения в messages.txt дописываются в конец

$file = file("messageы.txt");

вернет тебе массив строк из файла messages.txt
кол-во элементов, как понимашь, можно посчитать


дописываем в странице с аяксом

var ident = 0;

ajaxsearch.php?ident= " + ident + ";

в ajaxsearch.php

перед

for($i=0;$i<count($file);$i++)
{
echo $file[$i]."<br>";
}

втсавляешь

$start = $_GET['ident'];

далее

$newident = count($file);

далее

echo $newident . "@@"; (или любой разделитель)

for($i=$start+1;$i<count($file);$i++)
{
echo $file[$i]."<br>";
}


на выходе ты должен получить что-то типа

246@@mess<br>mess2<br>

Теперь в основном файле из того что получил функцией split() отделяешь новый идентификатор

переприсваеваешь переменную ident

потом вторую часть массива запихиваешь в твой <span>

dest = document.getElementById("responseHTML");

dest.innerHTML = newdata (назовем так) + dest.innerHTML;

где-то так.
 

axper

Новичок
Never die

Спасибо.Очень помог.

А ты не в курсе, как можно, так сказать,заглушить щелчки правой кнопки?
то есть мне нужно чтобы при нажатии правой кнопки на на каком-либо слове, выполнялась определенная функция, а не выскакивало обычное меню.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху