ugrás a tartalomhoz

readyState = 1 folyamatosan

MSzilveszter · 2009. Szep. 14. (H), 15.55
Lassan egy éve használom ugyan azt a JS fájlt, hogy kezeljem a szerver és a browser közti kapcsolatot. Eddig ment is, most átalakítottam az oldalt, de a JS részeket nem bántottam - mindössze az URLT írtam át, amit meghív. Azóta a readystate, történjék bármi, 1 és nincs továbblépés.

Ez kezeli a csatornát:

function GetXmlHttpObject() //csatorna keszites, vagy hibauzenet
	{
		if(window.XMLHttpRequest)
  			{
				//IE7+, Firefox, Chrome, Opera, Safari
				return new XMLHttpRequest();
			}
		if(window.ActiveXObject)
			{
				/* // code for IE6, IE5 */
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
		return null;
	}
Ez hívja meg (fnc):

function open_std(mit_nyit, hova) //egyszeru behivasa egy filenak
	{

		xmlhttp=GetXmlHttpObject();
		if(xmlhttp==null)
		  {
			clear_text(hova, '<br>XMLHTTP support k&eacute;ne (ie6, 7, 8, FF1, 2, 3, FF for Mac, Safari b&ouml;ng&eacute;sz&otilde;k a nyer&otilde;k), an&eacute;lk&uuml;l nem fog futni a rendszer!');
			return;
		  }
		
 		var url='http://ajax.nhir.hu/';
		url=url+"&oti="+mit_nyit; //ezt kikeresi adatbazisbol a szerver oldal, majd az eredmeny szerint nyit function()-t; //

		clear_text(hova, '<center><img src="/___common/templates/images/ajax-loader.gif" width="150px;" style="z-index: 10;"><br>K&eacute;r&eacute;s folyamatban.</center>');
		xmlhttp.open('POST',url);
		xmlhttp.send(null);
		
		if(navigator.appName=='Microsoft Internet Explorer')
			{
				xmlhttp.onreadystatechange=new Function(responder(hova));
				//this.requester.onreadystatechange = new Function(this.actionOnReady());
			}
		else
			{
				xmlhttp.onreadystatechange=responder(hova);
			}
}
Ez pedig a responder() fnc, ami a readyState-et figyeli és reagálja le:

function responder(target) //eredmeny kiiratas
	{
		add_text(target, '<center><strong>St&aacute;tuszfeldolgoz&aacute;s folyamatban... V&aacute;rjon!</strong> <i>('+target+')</i></center><br>');
		if(xmlhttp.readyState==0)
		  	{
			add_text(target, '<center><strong>Nem inicializ&aacute;l&oacute;dott a kapcsolat!</strong></center><br>');
			}
		 if(xmlhttp.readyState==1)
			{
			add_text(target, '<center><strong>Kapcsolat letrejott</strong></center><br>');
			}
		if(xmlhttp.readyState==2)
			{
			add_text(target, '<center><strong>K&eacute;r&eacute;s elk&uuml;ldve</strong></center><br>');
			}
		if(xmlhttp.readyState==3)
			{
				add_text(target, '<center><strong>K&eacute;r&eacute;s folyamatban</strong></center><br>');
			}
		if(xmlhttp.readyState==4)
		  {
			add_text(target, '<br><center>K&eacute;r&eacute;s lefuttattva</center><br>');
			clear_text(target, xmlhttp.responseText);
	  }
	}
Az add_text a target id-jű elem innerHTML-jét változtatja meg második értékre.
A clear_text ugyan ezt csinálja, csak nem bővíti a tartalmat, hanem először kiüríti.
A gyakorlatban ez: admin.nhir.hu -> bal oldali belépés modul. Ezt hívja meg: ajax.nhir.hu

Az adatküldés azért post, mert a szerver oldalon be van állítva ez (és még néhány domain ugyan így rá van irányítva az oldalra, ezért nagyjából semmi nem él, ami GET):

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/_server
RewriteCond /url/to/webroot/%{REQUEST_URI} !-f
RewriteCond /url/to/webroot/%{REQUEST_URI} !-d
RewriteRule ^(.*) /index.php?$1 [L] 
Az igazat megvallva már egy-másfél napom ment rá, hogy meglássam az -amúgy feltehetőleg evidenst, de egyszerűen nem látok hibát (biztosan van!), legalábbis olyat nem, amit felismernék.


Köszönöm előre is a segítséget.
 
1

Teszt

Poetro · 2009. Szep. 14. (H), 20.25
És kipróbáltad már, hogy az URL-re nem AJAX-ból, hanem csak szimplán POST-olsz? Nem lehet, hogy valahol máshol van a hiba, mondjuk hibás fejlécet kap az XHR, vagy hasonló?
2

Igen

MSzilveszter · 2009. Szep. 14. (H), 20.55
Igen, kipróbáltam, máshonnan fogadta a fájl a POST értéket. továbbított adatok nélkül sem megy jelenleg.
Firebug segítségével megnéztem, a kérés 200 OK -kal tér vissza, de semmit nem kap. A body üres ezen a csatornán keresztül megkérve. Szerveroldalon accessLog szerint sem történik semmi. Ha böngészőből hívom meg közvetlenül, akkor lefut viszont.
Ezt a headet adja vissza Firebug szerint:

Date	Mon, 14 Sep 2009 18:17:39 GMT
Server	Apache
Set-Cookie	PHPSESSID=f703945ab302166279cdc0a59aa94f9e; path=/
Expires	Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control	no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma	no-cache
Keep-Alive	timeout=30, max=512
Connection	Keep-Alive
Transfer-Encoding	chunked
Content-Type	text/html
Illetve próbáltam ezzel is bővíteni:

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
eredménytelenül.
3

saját hibám, saját meggondolatlanságom...

MSzilveszter · 2009. Szep. 15. (K), 01.01
Nos, nagyon egyszerű volt a gond, és tényleg csak én voltam a vak...
A meghívás az admin aldomanról ment az ajax aldomainre...
A szerveren ezek egy és ugyan azon fájlt takarják, mint amolyan core-t, viszont az ajaxnak mégis csak két különböző, és ez annyira nem működő képes...

Ja, és a forráskód felül, ennyi javítással 2. 15-sor nál:
xmlhttp.open('GET',url,false); 
hibátlan.