ben bezig iets met ajax te maken maar het werkt nog iet helemaal zoals ik wil. dit is de code
var info;
function sendRequest(value, soort){
http.open('GET', 'getinfo.php?' + soort + '=' + value);
http.onreadystatechange = handleResponseText;
http.send(null);
}
function handleResponseText(){
if(http.readyState == 4 && http.status == 200){
if(http.responseText){
info = http.responseText;
}
}
}
function send(waarde, soort){
sendRequest(waarde, soort);
return info;
}
het probleem is dat de var info al gereturnd wordt terwijl die nog geen waarde heeft gekregen. Roep ik daarna nog een keer de functie send() aan dan doet die het wel. Iemand die een oplossing weet?
Ik schop hem nog een keer want volgens mij weet Jelmer hier veel meer vanaf :)
?Onbekende gebruiker
10-03-2006 20:59
http? Waar komt die vandaan?
Hemel of hel?
Bedenk nadat je een request hebt uitgevoerd, dat je het AJAX XMLHttpRequest object opnieuw moet initailiseren. (dus opnieuw http = new ...)
Ik heb daar ook ooit 5 posts achter moesten maken verspreid over 7 dagen :-)
var http = createRequestObject();
function createRequestObject(){
var req;
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
}
else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
alert('Probleem met serververbinding');
}
return req;
}
ik had alleen de relevante code geplaatst, maar hoezo moet je het AJAX XMLHttpRequest object opnieuw initailiseren. Het werkt al goed alleen nu moet hij nog wachten met de return totdat hij echt klaar is.
edit: opnieuw het object aanmaken hoeft trouwens niet. Gewoon open() opnieuw aanroepen is al voldoende. Nadeel van 1 object gebruiken is dat verschillende requests door elkaar gaan lopen, en dat kan niet. Daarom raad ook ik aan om gewoon iedere request over een apart object te doen.
?Onbekende gebruiker
11-03-2006 07:57
Jelmer schreef op 10.03.2006 23:58
opnieuw het object aanmaken hoeft trouwens niet. Gewoon open() opnieuw aanroepen is al voldoende. Nadeel van 1 object gebruiken is dat verschillende requests door elkaar gaan lopen, en dat kan niet. Daarom raad ook ik aan om gewoon iedere request over een apart object te doen.