我循环向Google地图服务器发出总共八个xmlhttprequests,并处理服务器返回的json对象以检索邮政编码。如果xmlhttprequests是同步的,则代码可以正常工作。由于应该使用异步请求,因此我试图将代码转换为异步请求。没用

我使用两个警报来监视myZip。运行代码时,返回上方的第二个警报将运行八次,并将myZip显示为null或undefined,这就是返回的内容。然后,不幸的是,第一个警报运行了八次,并给出了所需的邮政编码。在我看来,就绪状态不会改变,直到为时已晚。

我应该如何修改代码,使其返回邮政编码,而不是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;

最佳答案

您应该使用回调而不是return语句,或者应将其作为Stratified JavaScript:http://stratifiedjs.org运行。
然后,即使它不会阻止您的浏览器,也可以像您一样以同步方式编写它。

10-08 19:12