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:
  1. function GetXmlHttpObject() //csatorna keszites, vagy hibauzenet  
  2.     {  
  3.         if(window.XMLHttpRequest)  
  4.             {  
  5.                 //IE7+, Firefox, Chrome, Opera, Safari  
  6.                 return new XMLHttpRequest();  
  7.             }  
  8.         if(window.ActiveXObject)  
  9.             {  
  10.                 /* // code for IE6, IE5 */  
  11.                 return new ActiveXObject("Microsoft.XMLHTTP");  
  12.             }  
  13.         return null;  
  14.     }  
Ez hívja meg (fnc):
  1. function open_std(mit_nyit, hova) //egyszeru behivasa egy filenak  
  2.     {  
  3.   
  4.         xmlhttp=GetXmlHttpObject();  
  5.         if(xmlhttp==null)  
  6.           {  
  7.             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!');  
  8.             return;  
  9.           }  
  10.           
  11.         var url='http://ajax.nhir.hu/';  
  12.         url=url+"&oti="+mit_nyit; //ezt kikeresi adatbazisbol a szerver oldal, majd az eredmeny szerint nyit function()-t; //  
  13.   
  14.         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>');  
  15.         xmlhttp.open('POST',url);  
  16.         xmlhttp.send(null);  
  17.           
  18.         if(navigator.appName=='Microsoft Internet Explorer')  
  19.             {  
  20.                 xmlhttp.onreadystatechange=new Function(responder(hova));  
  21.                 //this.requester.onreadystatechange = new Function(this.actionOnReady());  
  22.             }  
  23.         else  
  24.             {  
  25.                 xmlhttp.onreadystatechange=responder(hova);  
  26.             }  
  27. }  
Ez pedig a responder() fnc, ami a readyState-et figyeli és reagálja le:
  1. function responder(target) //eredmeny kiiratas  
  2.     {  
  3.         add_text(target, '<center><strong>St&aacute;tuszfeldolgoz&aacute;s folyamatban... V&aacute;rjon!</strong> <i>('+target+')</i></center><br>');  
  4.         if(xmlhttp.readyState==0)  
  5.             {  
  6.             add_text(target, '<center><strong>Nem inicializ&aacute;l&oacute;dott a kapcsolat!</strong></center><br>');  
  7.             }  
  8.          if(xmlhttp.readyState==1)  
  9.             {  
  10.             add_text(target, '<center><strong>Kapcsolat letrejott</strong></center><br>');  
  11.             }  
  12.         if(xmlhttp.readyState==2)  
  13.             {  
  14.             add_text(target, '<center><strong>K&eacute;r&eacute;s elk&uuml;ldve</strong></center><br>');  
  15.             }  
  16.         if(xmlhttp.readyState==3)  
  17.             {  
  18.                 add_text(target, '<center><strong>K&eacute;r&eacute;s folyamatban</strong></center><br>');  
  19.             }  
  20.         if(xmlhttp.readyState==4)  
  21.           {  
  22.             add_text(target, '<br><center>K&eacute;r&eacute;s lefuttattva</center><br>');  
  23.             clear_text(target, xmlhttp.responseText);  
  24.       }  
  25.     }  
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):
  1. RewriteEngine on  
  2. RewriteCond %{REQUEST_URI} !^/_server  
  3. RewriteCond /url/to/webroot/%{REQUEST_URI} !-f  
  4. RewriteCond /url/to/webroot/%{REQUEST_URI} !-d  
  5. 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:
  1. Date    Mon, 14 Sep 2009 18:17:39 GMT  
  2. Server  Apache  
  3. Set-Cookie  PHPSESSID=f703945ab302166279cdc0a59aa94f9epath=/  
  4. Expires Thu, 19 Nov 1981 08:52:00 GMT  
  5. Cache-Control   no-store, no-cache, must-revalidate, post-check=0pre-check=0  
  6. Pragma  no-cache  
  7. Keep-Alive  timeout=30max=512  
  8. Connection  Keep-Alive  
  9. Transfer-Encoding   chunked  
  10. Content-Type    text/html  
Illetve próbáltam ezzel is bővíteni:
  1. 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:
  1. xmlhttp.open('GET',url,false);   
hibátlan.