JavaScript XMLHttpRequest return

Fórumok

Üdv!

JavaScript segítségével szeretnék HTTP GET kéréseket intézni egy szerver felé. Mivel több helyen, gyakran előjön ez a dolog, gondoltam csinálok egy http_get() függvényt, és csak azt kell meghívogatnom. A függvényem így néz ki:

function http_get(url) {
var xmlhttp=false;

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp=false;
}
}

if (!xmlhttp && window.createRequest) {
try {
xmlhttp = window.createRequest();
} catch (e) {
xmlhttp=false;
}
}

xmlhttp.open("GET", url,true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if (xmlhttp.status==200) return xmlhttp.responseText
else if (xmlhttp.status==404) return false

}
}
xmlhttp.send(null)

}

A problémám az vele, hogy ha return helyett mondjuk alert-ezem a responseText-et, akkor megkapom amit szeretnék, return-al viszont nem kapok vissza semmit. Arra tippelek, hogy gyorsabban írja ki a böngésző a return értéket, minthogy abba kerülhetne valami... De mivel nem értek igazán a JS-hez, a Ti véleményetekre lennék kíváncsi. Köszönöm!

Hozzászólások

Ket fuggvenyed van, a http_get a keres kuldese utan visszater, a belso fuggveny viszont csak a valasz megerkezesekor hivodik meg!

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"

Arra gondoltam a válaszod után, hogy megoldom az egészet úgy, hogy az onreadystatechenge-ből kihozom az eredményt egy változóval, azután http_get() végére teszek egy while-t, ami azt nézi, h milyen state-ben van az xmlhttprequest, és ha 4-es akkor return... Ez és még csomó hasonló while-os megoldás sajnos fagyást eredményezett... Mi erre a szép megoldás végül?:\ Nem gondoltam, hogy ezzel ekkorát lehet szívni.. :) De ebben szerintem erősen a JS ismeret hiánya van csak benne...

szerk.: Közben egy callback fgv.-s megoldást találtam ki rá, ami lényegében működik, de a böngésző valamiért úgy csinál, mintha a végtelenségig csak töltene... (FF-ben forog a kis "kör" a tabhoz tartozó fülön...)

Az ajaxnak az első betűjéből is adódik, h aszinkron dolgokra való. Tehát nem várod meg az eredményt, hanem amikor megérkezik, akkor megérkezik, de a többi dolog megy tovább, mintha mi se történt volna. Ha valamit megérkezéskor akarsz végrehajtani, akkor akkor azt rakd bele a belső függvénybe és kész.
Ha viszont neked mindenképpen kell a válasz, s míg meg nem érkezik, addig nem akarsz csinálni semmit, akkor neked nem a klasszikus ajax kell. De attól még a httprequest jó.
xmlhttp.open("GET", url,true); helyett a xmlhttp.open("GET", url,false); kell.
és akkor nem is kell statechange vizsgálat, meg miegymás, hanem egyből meglesz a válaszod.

Remélem érhető volt.

Arra figyelj, hogy szinkron httprequestnel a bongeszo a valasz megerkezeseig szabalyosan lefagy.

Sz'al ha van egy lassu internetkapcsolatod, addig biza eger se jobbra, se balra, talan a tobbi tab mukodni fog (pl. chrome-ban), de ennyi...

Ajanlott megismerni crockford videoit a YUI theater -en (pl. function the ultimate, the metamorphosis of ajax)

http://developer.yahoo.com/yui/theater/