Google マップ サーバーに対して合計 8 つの xmlhttprequest をループで発行し、サーバーが返す json オブジェクトを処理して郵便番号を取得します。xmlhttprequests が同期している場合、コードは正常に機能します。非同期リクエストを使用することになっているので、コードを非同期に変換しようとしています。うまくいきません。
myZip を監視するために 2 つのアラートを使用します。コードが実行されると、リターンのすぐ上にある 2 番目のアラートが 8 回実行され、myZip が null または未定義として表示され、それが返されます。その後、最初のアラートが 8 回実行され、目的の郵便番号が表示されますが、残念ながら遅すぎます。私には、readystate は手遅れになるまで変化しないようです。
null ではなく郵便番号を返すようにコードを変更するにはどうすればよいですか? どんな助けでも大歓迎です。
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;