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 :)
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.
w8 ff kben ff aan het bellen kzal zo kijken
http.open('GET', 'getinfo.php?' + soort + '=' + value); mssn moet hier nog true achter :)

ik heb het altijd zo:


http.open("GET", "hoi.php",true); // Methode, Doel en Async
dat true is voor het asynchronious :) en dit kan niet met een return, of je moet een while loop doen om die return
hoe bedoel je precies een while om de return
while (info is leeg)
{
blijf in de lus
}

return info;

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.
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.
Blijkbaar wel met dat console pagina van mij :-)
best raar dat ik nooit last heb van dit probleem...

Reageren