gpt4 book ai didi

javascript - 循环中的onreadystatechange,readystate改变太晚了

转载 作者:行者123 更新时间:2023-11-28 02:48:31 25 4
gpt4 key购买 nike

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

我使用两个警报来监控 myZip。运行代码时,返回正上方的第二个警报运行八次,并将 myZip 显示为 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 语句,或者您应该将其作为分层 JavaScript 运行:http://stratifiedjs.org 。然后您可以以同步方式编写它,就像您所做的那样,即使它不会阻止您的浏览器。

关于javascript - 循环中的onreadystatechange,readystate改变太晚了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com