Я в цикле выдаю восемь xmlhttprequests на картографический сервер Google и обрабатываю объекты json, которые сервер возвращает для получения почтовых индексов. Код работает нормально, если xmlhttprequests являются синхронными. Поскольку я должен использовать асинхронные запросы, я пытаюсь преобразовать код в асинхронный. Не работает
Я использую два оповещения для мониторинга myZip. Когда код запускается, второе предупреждение, прямо над возвратом, запускается восемь раз и показывает myZip как ноль или неопределенный, и это то, что возвращается. Затем первое оповещение запускается восемь раз и дает нужный почтовый индекс, к сожалению, слишком поздно. Мне кажется, состояние готовности не меняется, пока не станет слишком поздно.
Как мне изменить код, чтобы он возвращал почтовый индекс, а не ноль? Любая помощь будет принята с благодарностью.
var url = "http://maps.googleapis.com/maps/api/geocode/json?address="+address+city+state+"&sensor=false";
req.open("GET", url,true);
var myZip;
req.onreadystatechange = function()
{
if(req.readyState == 4 && req.status == 200) {
(function(data){
var myObj = eval( '(' + data + ')' );
if(myObj.status=="OK"){
for(i=0; i <myObj.results[0].address_components.length; i++){
if(myObj.results[0].address_components[i].types=="postal_code"){
myZip=myObj.results[0].address_components[i].long_name;
alert('zip is '+myZip);
}
}
}
else
{
alert("Error: returned status code "+req.status+" "+req.statusText);
}
})(req.responseText);
}
}
req.send();
alert(myZip);
return myZip;