Ich gebe insgesamt acht xmlhttprequests an einen Google-Map-Server aus und verarbeitet die json-Objekte, die der Server zurückgibt, um die Postleitzahlen abzurufen. Der Code funktioniert einwandfrei, wenn die xmlhttprequests synchron sind. Da ich asynchrone Anfragen verwenden soll, versuche ich den Code asynchron zu konvertieren. Es funktioniert nicht.onreadystatechange in einer Schleife, readystate ändert sich zu spät
Ich verwende zwei Warnungen, um myZip zu überwachen. Wenn der Code ausgeführt wird, wird die zweite Warnung direkt über der Rückgabe acht Mal ausgeführt, und myZip wird als null oder undefiniert angezeigt und zurückgegeben. Dann läuft der erste Alarm achtmal und gibt die gewünschte Postleitzahl, leider zu spät. Es scheint mir, dass sich der Fertigzustand erst zu spät ändert.
Wie sollte ich den Code ändern, so dass es die Postleitzahl zurückgibt, nicht null? Jede Hilfe wird sehr geschätzt.
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;
Danke für die Antwort. req ist nur ein Standard xmlhttprequest (req = new XMLHttpRequest();) Ich glaube, die Req wird nicht überschrieben, weil ich acht Warnungen (die erste Warnung wird acht Mal aufgerufen wird, zeigt die gewünschte Postleitzahl.) – yky
Sorry, wenn Sie das glauben alles ist in Ordnung, ich kann dir nicht helfen. Es ist auch magisch, wie man mit einem standard xmlhttprequest um die self-origin-policy herumkommt. –