Naskrobałem sobie chat w AjAX'ie.
I mam funkcję se() która sczytuje z inputa wartość i wysyła ją (GET'em!) do odpowiedniego skryptu w PHP który sobie już z nią radzi sam.
Mam też funkcję ref() która odświeża diva z treścią chatu co 2,5 sekundy. (to działa dość prosto - w funkcji po prostu pod koniec mam onTimeout('ref()',2500)

Więc problem jest następujący:
Kiedy ktoś próbuje wysłać nową wiadomość w trakcie odświeżania chatu, chat znika a w spicie blędów firefoxa pojawia się fatal:
Kod
Error: uncaught exception:
[Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: (adres strony, pliku) :: ref :: line 34" data: no]
[Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]" nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: (adres strony, pliku) :: ref :: line 34" data: no]
Starałem się to zabezpieczyć tworząc zmienną globalną i zmieniając jej wartość w czasie pracy jednej funkcji, i ifkami broniąc dostępu do drugiej kiedy pracuje pierwsza.
Wszystko na nic.
Błąd Ciągle się powtarza.
Ma ktoś jakiś sposób?
Będę wdzięczny.
brtekb
PS.
Zamieszczę wam kod funkcji:
Kod
var send=0;
function se(){
if(send==1){
setTimeout('se();',500);
return false;
}
send=1;
var msg = document.getElementById('msg').value;
document.form.msg.value = '';
dis(true);
Req.open('GET','chatsend.php?msg='+msg);
Req.send(null);
send=0;
}
function ref(){
if(send==1){
setTimeout('ref();',500);
return false;
}
send=1;
Req.open('GET','chatview.php?aa='+Math.random()*99999);
Req.onreadystatechange = function(){if(Req.readyState==4){var msg = Req.responseText; document.getElementById('tu').innerHTML = msg; dis(false); setTimeout('ref()',2000);}};
Req.send(null);
send=0;
}
ref();
function se(){
if(send==1){
setTimeout('se();',500);
return false;
}
send=1;
var msg = document.getElementById('msg').value;
document.form.msg.value = '';
dis(true);
Req.open('GET','chatsend.php?msg='+msg);
Req.send(null);
send=0;
}
function ref(){
if(send==1){
setTimeout('ref();',500);
return false;
}
send=1;
Req.open('GET','chatview.php?aa='+Math.random()*99999);
Req.onreadystatechange = function(){if(Req.readyState==4){var msg = Req.responseText; document.getElementById('tu').innerHTML = msg; dis(false); setTimeout('ref()',2000);}};
Req.send(null);
send=0;
}
ref();
Wyciąłem funkcję dis(), żeby nie śmieciła. Przy okazji chętnie wysłucham pomysłów jak to wszystko lepiej rozwiązać.