« 1 2 »
Autor Zpráva
BS-Harou
Profil *
Měl jsem stránku s AJAXovým chatem a všechno fungovalo dobře, teď jsem jí trochu přeprogramoval a udělal nový design. A z ničeho nic se objevil jeden prbolém s mým AJAXovým chatem, a to ten že když vlezu na stránku s nim, tak parametr readyState leze z 0 do 3 a pak skočí zas na 0. Takže se nic nenačte. zajímavé je, že pokud se stránka jednou nebo dvakrát aktualizuje, tak se chat načte, ale když opět kliknu normálně na sekci chat tak je opět problém :(

Onen chat je na stránce: http://stargate-rasa.info/jaffove/str-chat2
A javascript k tomu je zde: http://stargate-rasa.info/jaffove/obrazky/chat.js

Poradíte někdo v čem je problém? Stává se mi to jak v FF 2, FF 3 tak i v opeře (v IE mi nejde AJAX vůbec, ale to je zas jinej problém :D )

Děkuji, za pomoc a odpovědi
Měsíček
Profil
Co si dříve opravit odesílání hlaviček?
BS-Harou
Profil *
Měsiček: ehm, kterých? :D respektive spíš jak, co je špatně? S ajaxem teďka teprv začínam :(
Měsíček
Profil
"ehm, kterých?"

Takových o kterých vyhazoval PHP parser zuřivě varování .. zajímavé, že už zmizely :)
BS-Harou
Profil *
Měsíček: aha pardon, celej den na webu pracuju, tak jsem zrovna něco možná zrovna dělal s indexem :D

takže teď už můžete poradit, prosim prosim? :))
Arcturus
Profil
Neměl by jsi při změně stavu požedavku zavolat funkci hrsc() a ne proměnou hrsc?
function process(){
	page = "http://stargate-rasa.info/jaffove/getM.php";
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
	if (xmlHttp) {
			try {
				xmlHttp.open("POST", page, true);
				xmlHttp.onreadystatechange = hrsc();
				xmlHttp.send(null);
			}  catch(e){
				setTimeout('process()', 1000);
				promX = document.getElementById("ins");
				promX.innerHTML = " Error 002, Pravděpdobně tato stránka zatím nebyla vytvořena.";
				
			}
		}
	} 
}
Chamurappi
Profil
Reaguji na Arcturus:
On ale nevolá proměnnou hrsc, on přiřazuje funkci (nikoliv výsledek funkce), která se zavolá při onreadystatechange. Radíš mu, aby si do skriptu zanesl známou chybu.
BS-Harou
Profil *
tak super, teď ještě ale kde ja ta opravdová chyba? btw aspon dejte vedet jestli mate stejny problem, treba se to deje jen na mem PC :P
Měsíček
Profil
Co se stane když upravíš tento řádek if (xmlHttp.readyState == 4) na if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0), protože tato funkce je zatím nastavena tak,že se zavolá když je xmlHttp.readyState na 0, ale vnitřek funkce se už nevykoná, to buď rovnou už před voláním fc. hrsc nepropouštěj 0 a nebo ji propusť vždy.
Arcturus
Profil
Reaguji na Chamurappi:
"On ale nevolá proměnnou hrsc, on přiřazuje funkci (nikoliv výsledek funkce), která se zavolá při onreadystatechange."

A od kdy je
xmlHttp.onreadystatechange = hrsc;
přiřazení funkce??
BS-Harou
Profil *
Arcturus: už dlouho :) .. v timhle má Měsíček pravdu

Měsíček: stane se to, že problém nezmizí, akorát místo toho, že se obsah nahrává se pro změnu nezobrazí vůbec nic :D
Chamurappi
Profil
Reaguji na Arcturus:
Od doby, kdy jsou i funkce proměnné. Takže skoro odjakživa.
Přidá-li závorky, rozbije si i to, co mu zatím fungovalo.


Reaguji na BS-Harou:
V současné podobě mi tvá stránka hlásí JS chybu kvůli neexistenci elementu s id="ins".
Nemůže se stát, že serverový skript zahlásí chybu?
BS-Harou
Profil *
Chamurappi: to je zajímavý protože na stránce chat2 normálně je: <div id="ins" height="270px"></div> a dokonce to do něj zapisuje, neni to způsobený tím, že script je externě? Každopádně kdyby byla nějaká přímá chyba v kódu tak by měl přestat jít javascript, ten ale "normálně" funguje.. :P
BS-Harou
Profil *
btw nejzájímavější na tom je ta část, že po několikánásobné aktualizaci kód začne fungovat ...
Měsíček
Profil
IMHO kdyby jsi nevolal setTimeout("act()",20000); po 20 sekundách možná by jsi nemusel ani aktualizovat :) .. jinak ještě když přehodíš volání xmlHttp.onreadystatechange = hrsc; a xmlHttp.send(null); tedy dříve dáš *.send(); Pak zkus do alertu chytnout jaké hodnoty nabývá xmlHttp.readyState.
BS-Harou
Profil *
Měsíček: to první s tou aktualizací jsem nějak nepochopil (sry mam dlouhe vedeni :P )

Jinak to druhý je skutečně zajímavý, protože:
V opeře to hlásí od 2 do 4 a načte se to vždycky, ale jen když tam je ten alert() .. asi pomáhá když se to chvilku zdrží ..
Ve firefoxu to hlásí nejdřív 1 a pak několikrát za sebou nulu a nenačte se nic

.. teď jsem to ale vyzkoušel i nepřehozeně a efekt je úplně stejnej :(
BS-Harou
Profil *
Měsíček: tak už jsem pochopil i to první, zkusil jsem tu aktualizaci hodit do komentu - nepomohlo
Měsíček
Profil
Ne já právě myslel, aby jsi to tam nechal, ale na menší interval :) třeba na 1 sekundu. Jinak ze začátku jak jsi změnil skript mi to v FF dávalo samé 0, ale asi těsně (10) vteřin než si to dal do původního tak mi to házelo i v FF 3 a 4.
BS-Harou
Profil *
Měsíček: jj ono když i ve FF párkrát aktualizuješ tak to místo hul hodilo 2,3,4 a načetlo se to :D

Zkoušej jsem to dát an sekundu i na 0.1 sekundy .. ale nepomáhá to, musí se aktualizovat celá stránka :/
Měsíček
Profil
No je to teda s tímto skriptem sranda :) zkoušel jsem si ho zkopírovat a fungoval mi na 20% (jak teď nám všem), když jsem ho dal do externího souboru a když jsem ho dal přímo do stránky tak fungoval na 90% :)
BS-Harou
Profil *
no já jsem ho původně měl na stejný stránce a dělal stejnej problém, právě já velice podobný kód pouze lehce upravený používám i jinde na stránce kde funguje normálně a tam všude jsem to měl externí tak jsem to zkusil i tady, ale nepomohlo :P
Měsíček
Profil
Tak to je zvláštní, protože teď už mi funguje pokaždé i v externím (tedy když ho, ale zavolám až se načte celá stránka) .. tedy místo act(); dát window.onload = act; a <script> samozřejmě do hlavičky ..
Měsíček
Profil
Hele, když napíšu window.onload = act tak k tomu mám svůj důvod :) ty tam pořád cpeš
document.body.onload = act;
což nemůže fungovat. Takže přestaň testovat a dej tam window.onload = act;
BS-Harou
Profil *
no to sem tam měl, ale document.body.onload = act; dělá vlastně to samý - bohužel ani jedno nefunguje :D
Měsíček
Profil
"no to sem tam měl, ale document.body.onload = act; dělá vlastně to samý - bohužel ani jedno nefunguje :D"

Kecáš, ..

1.) Nedělá to to samé aneb document.body.onload = act; nedělá nic a window.onload = act; dělá to co má.
2.) Zakomentářoval jsi kde co, změnil jsi polovinu a naprosto si to zvoral více než to bylo předtím, celý skript má vypadat takhle, tak si ho tam taky takhle nakopíruj.

function trim(str){
	return str.replace(/^\s+|\s+$/g,"");
}
function act(){
	process();
	setTimeout("act()",20000);
}

// MENU ********************************************************************

var xmlHttp = createReq();
function createReq(){
	var xmlHttp;
	try {
		xmlHttp = new XMLHttpRequest();
	} catch(e) {
		var xmlAr = new Array('MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0',' MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP');
		for (var i=0;i<xmlAr.length && !xmlHttp;i++){
			try {
				xmltHttp = new ActiveXObject(xmlAr[i]);
			} catch(e) {
			}
		}
	} if (!xmlHttp){
		promX = document.getElementById("ins");
		promX.innerHTML = " Error 001, bude-li chyba přetrvávat prosím dejte vědět administrátorům";
		
	} else {
		return xmlHttp;
	}
}
function process(){
	page = "http://stargate-rasa.info/jaffove/getM.php";
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0){
	if (xmlHttp) {
			try {
				xmlHttp.open("POST", page, true);
				xmlHttp.onreadystatechange = hrsc;
				xmlHttp.send(null);
			}  catch(e){
				setTimeout('process()', 1000);
				promX = document.getElementById("ins");
				promX.innerHTML = " Error 002, Pravděpdobně tato stránka zatím nebyla vytvořena.";
				
			}
		}
	} 
}
function hrsc (){
	if (xmlHttp.readyState == 4){
		if (xmlHttp.status == 200 || xmlHttp.status == 0){
			try {
				hsr();
			} catch(e) {
				promX = document.getElementById("ins");
				promX.innerHTML = " Error 003, Nepodařilo se vypsat obsah stránky<br/>bude-li chyba přetrvávat prosím dejte vědět administrátorům";
				
			}
		} else {
			promX = document.getElementById("ins");
			promX.innerHTML = " Error 004, Spojení je zaneprázdněno.<br/>bude-li chyba přetrvávat prosím dejte vědět administrátorům";
			
		}
	} else {
		promX = document.getElementById("ins");
		promX.innerHTML = " Nahrávám obsah, prosím strpení :)))</div>";
		
	}
}
function hsr(){
	var text = xmlHttp.responseText;
	promX = document.getElementById("ins");
	promX.innerHTML = text;
	//document.getElementById("obs").style.height = document.getElementById("ins").offsetHeight+140+"px";
}

window.body.onload = act;
Měsíček
Profil
Jinak tohle tě do očí nebije? :
	/*var text = xmlHttp.responseText;
	promX = document.getElementById("ins");
	promX.innerHTML = text;*/
BS-Harou
Profil *
ok tak to s tim body nefunguje, ale to je jedno protože jsem tam zkopíroval to co si sem hodil a enfunguje to taky :D
BS-Harou
Profil *
Měsíček: to jsem tam dal jen v jednu chvíli, když jsem něco zkoušel jinak to v komentářích nebylo...
Měsíček
Profil
Já blbec ti to zkopíroval s tím window.body .. takže správně má být window.onload = act;
BS-Harou
Profil *
opraveno, stále nejde
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: