Ü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!
- 1821 megtekintés
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$%#$#%^*^"
- A hozzászóláshoz be kell jelentkezni
Uhh, tényleg. Ez elkerülte a figyelmemet elég rendesen... Köszönöm! :)
- A hozzászóláshoz be kell jelentkezni
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...)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Áhh, köszönöm, valóban ez a legjobb megoldás talán nekem. De rájöttem, hogy az én verzióm is teljességgel jó, más okozta a folytonos töltés látszatát. De maradok azt hiszem az utóbbinál. Köszi még egyszer ;]
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni