I en loop vill jag anropa en funktion som hämtar data via ajax som jag vill att den skall retunera till obj2 i loopen. Genom att sätta tredje parametern i xmlhttp.open till true så blir ju anropet asynkront och jag hade hoppats på att jag då kunde retunera värdet. Men det gick ju inte.
Så finns det något sätt att lösa detta på?
for (var i = 0; i < l; i++) {
var obj= list[i];
//do things with obj
var obj2= getMore(obj.regionId);
//do things with obj2
}
function getMore(regionid) {
var DTO = { "regionid": regionid}] };
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", '[URL]', true);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
[B] //Vill att detta skall vara funktionens return värde[/B]
return JSON.parse(xmlhttp.responseText) || null;
}
};
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
xmlhttp.setRequestHeader("X-Request", "JSON");
xmlhttp.send('json=' + JSON.stringify(DTO));
}
Asynkronprogrammering kräver att man tänker lite annorlunda. Din funktion getMore har ju returnerat för länge sedan när svaret väl kommer. Det du har i din return är ju vad du ger XMLHTTP tillbaka när dess onreadystatechange event triggar. Vid det laget är din loop redan färdig.