Лажа с Microsoft.xmlhttp

  • Автор темы Sel
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sel

Гость
#1
В общем такая штука. Есть запрос на сервер xmlh=new ActiveXObject('Microsoft.XMLHTTP') в функции, которая через window.setTimeout('relod ()', 7000) периодически вызывается. Функция достаточно большая. А проблема в том, что после некоторого времени таких периодических обращений значение book = xmlh.responseXML начинает давать неверные результаты одного узла, значение которого увеличивается при нажатии некоторой кнопки.
Если кто-то с таким встречался... посоветуйте чего-нибудь.
 
S

Sel

Гость
#2
Вот решил дополнить свою тему, чтобы не быть голословным приведу код. В общем некоторый узел в XML документе меняется каждые 0,3 секунды некоторым приложением.
А вот код странички такой

function aaa ()
{
var dt = new Date ();
if (window.ActiveXObject)
{
var xmlh=new ActiveXObject('Microsoft.XMLHTTP');
xmlh.open('GET','http://localhost/WebSite/obchi.xml?tm='+dt.getSeconds(), false);
xmlh.send();
var book = xmlh.responseXML;
var cc = book.getElementsByTagName("num")[0].text;
form1.txt1.value = cc;

}
window.setTimeout("aaa ()", 4000);
}


Так вот. txt1 определён как <input id="txt1" type="text" /> . Сначала значение txt1 соответствует изменению XML документа, но потом начинает писать что попало.
В чём здесь прикол?
 
E

Emelya

Гость
#3
Вроде хорошо всё выглядит. А точно , что это не obchi.xml парит?
 
S

Sel

Гость
#4
Точно. XML я открываю вручную и там всё нормально. "Парит" сам responseXML. Я это проверял. То есть писал responseText вот там как раз и видно, что парит ответ с сервера.
 
E

Emelya

Гость
#5
может здесь
var cc = book.getElementsByTagName("num")[0].text;
вместо ...text надо
Код:
var cc = book.getElementsByTagName("num")[0].firstChild.data
, потому что text это для responseText. Попробуй, вроде должно пролезть.
 
S

Sel

Гость
#6
Не пролазит :angry: Здесь можно материться? А то я чувствую, что нужно сбросить пар :) Есть у тебя ещё варианты?
 
E

Emelya

Гость
#7
вроде низзя, а какую ошибку кидает? или просто в форме не то, что должно быть, появляется?
 
E

Emelya

Гость
#8
Слушай, я тут подумал :angry: , "один умный вещь скажу, только ты не обижайся"(с)
Мысль: а если ты другую запись используешь, то всё равно ошибка? Типа:
Код:
function aaa ()
{
var dt = new Date ();
try{
if (window.ActiveXObject)
{
xmlh=new ActiveXObject('Microsoft.XMLHTTP');
xmlh.open('GET','http://localhost/WebSite/obchi.xml?tm='+dt.getSeconds(), true);
xmlh.onreadystatechange = bbb();
xmlh.send(null);}
} catch( e ) {
alert( "ошибка при подаче;(: " + e );
}
}
Код:
function bbb(){
if( 4 == xmlh.readyState ) {
if( 200 != xmlh.status ) {
alert( "ошибка при приёме " + xmlh.status + ": " + xmlh.statusText );
} else {
var book = xmlh.responseXML;
if (ergebnis.getElementsByTagName("num")[0]){
var cc = book.getElementsByTagName("num")[0].firstChild.data;
form1.txt1.value = cc;
}
}
}
window.setTimeout("aaa ()", 4000);
}
Надеюсь все скобки сходятся:)
Или другой вариант, в xml сделать атрибут , и потом его с помощью getAttribute считывать, вместо ...text
 
S

Sel

Гость
#9
Асинхронный вызов с параметром true я тоже пробовал. То же самое.
А ошибку не выдаёт, только значение form1.txt1.value = cc показывает сначало правильно (оно у меня увеличивается на единицу каждые 0,3 секунды), а где-то после 170 начинает или сбрасываться где-то к 10 и заново начинает расти или вообще бред пишет, не соответсвующий вообще значению в XML документе.
Хоть вешайся. :)
А на счёт атрибута я попробую, хотя мне уже из принципа интересно, что это за такая фигня.
МОгу тебе код выслать странички (хотя он у тебя уже есть) и приложение которое изменяет XML документ. Сам попробуешь :D
 
E

Emelya

Гость
#10
мне тоже интересно:) тока смотря на чём сервер, я с пхп обращаться не умею, тока с asp и jsp могу посмотреть.
 
S

Sel

Гость
#11
Вот и хорошо. Сервер локальный IIS 5.1. Программа, изменяющая XML документ на C#. Так что... куда слать? B)
 
S

Sel

Гость
#12
Ну, спасибо, что поломал со мной голову :D Я разобрался. Остаётся только злиться на себя. Или тупость или невнимательность :) Если что, будешь знать на будущее, проблема в dt.getSeconds(). Нужно getTime (). Секунды-то повторяются через определённое время.
 
E

Emelya

Гость
#13
Умных ошибок не бывает :D Блин, зато как тему повторили :)
 
Статус
Закрыто для дальнейших ответов.