Javascript 地理编码-如何等待首先解析所有位置,然后设置cookie 函数btnClick(){ var geocoder=new google.maps.geocoder(); var truckName=[]; var addr=[]; var Grid_Table=document.getElementById('GridView1'); var位置2=[{lat:-42.7545,lng:147.735,地址:“3”,地理地址:“waa”,卡车名称:“MX4”}, {lat:-43.7545,lng:142.735,地址:“1”,地理地址:“waa”,卡车名称:“MX5”}, {lat:-44.7545,lng:143.735,地址:“2”,地理地址:“waa”,卡车名称:“MX8”}; 对于(var row=1;row
所以我的地图起作用了。但它只绘制了前3个位置。我知道这是因为地理编码是异步的。但就我的一生而言,我不知道如何等待。我希望所有的地理编码都先完成,然后设置cookie。请帮忙 如果您不需要担心客户端的地理编码速率限制为50/秒,那么对代码的更改非常小 我添加了一个名为remaining的var,它是用预期的地理编码请求数设置的 然后在地理编码回调中,减量剩余,当为0时,全部完成Javascript 地理编码-如何等待首先解析所有位置,然后设置cookie 函数btnClick(){ var geocoder=new google.maps.geocoder(); var truckName=[]; var addr=[]; var Grid_Table=document.getElementById('GridView1'); var位置2=[{lat:-42.7545,lng:147.735,地址:“3”,地理地址:“waa”,卡车名称:“MX4”}, {lat:-43.7545,lng:142.735,地址:“1”,地理地址:“waa”,卡车名称:“MX5”}, {lat:-44.7545,lng:143.735,地址:“2”,地理地址:“waa”,卡车名称:“MX8”}; 对于(var row=1;row,javascript,google-maps,geolocation,Javascript,Google Maps,Geolocation,所以我的地图起作用了。但它只绘制了前3个位置。我知道这是因为地理编码是异步的。但就我的一生而言,我不知道如何等待。我希望所有的地理编码都先完成,然后设置cookie。请帮忙 如果您不需要担心客户端的地理编码速率限制为50/秒,那么对代码的更改非常小 我添加了一个名为remaining的var,它是用预期的地理编码请求数设置的 然后在地理编码回调中,减量剩余,当为0时,全部完成 function btnClick() { var geocoder = new google.maps.Ge
function btnClick() {
var geocoder = new google.maps.Geocoder();
var truckName = [];
var addr = [];
var Grid_Table = document.getElementById('GridView1');
var locations2 = [{lat: -42.7545, lng: 147.735, addres: "3", geoAddress: "waa", truckName: "MX4" },
{lat: -43.7545, lng: 142.735, addres: "1", geoAddress: "waa", truckName: "MX5" },
{lat: -44.7545, lng: 143.735, addres: "2", geoAddress: "waa", truckName: "MX8" }];
for (var row = 1; row < Grid_Table.rows.length - 1; row++) {
truckName.push(Grid_Table.rows[row].cells[0].textContent);
var addr = Grid_Table.rows[row].cells[4].textContent;
geocoder.geocode({ 'address': addr }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var loc = results[0].geometry.location;
var latitude = loc.lat();
var longitude = loc.lng();
locations2.push({ lat: latitude, lng: longitude, addres: addr, geoAddress: results[0].formatted_address, truckName: truckName[row] });
} // end if
}); // end geocoder
} // end for
document.cookie = "locations=" + JSON.stringify(locations2);
}
//如果btnClick被添加到提交按钮(在表单中),如下所示
SubmitButtoneElement.addEventListener('click',btnClick');
//或者使用jQuery之类的
$(SubmitButtoneElement)。在('单击',b单击)上;
//或
$(SubmitButtoneElement)。单击(b单击);
//然后您需要使用preventDefault来停止表单提交
功能BTN单击(e){
e、 preventDefault();//仅当处理提交按钮时才需要
var geocoder=new google.maps.geocoder();
var truckName=[];
var addr=[];
var Grid_Table=document.getElementById('GridView1');
var位置2=[{lat:-42.7545,lng:147.735,地址:“3”,地理地址:“waa”,卡车名称:“MX4”},
{lat:-43.7545,lng:142.735,地址:“1”,地理地址:“waa”,卡车名称:“MX5”},
{lat:-44.7545,lng:143.735,地址:“2”,地理地址:“waa”,卡车名称:“MX8”};
var remaining=Grid_Table.rows.length-2;//有多少请求挂起
对于(变量行=1;行
但它只打印前3个位置
-这可能不是因为它是异步的,可能是因为你可能达到了速率限制(每秒50次)-检查浏览器开发人员工具网络选项卡,看看谷歌是否告诉你放慢速度它只打印硬编码的3个位置。哦,对-抱歉,我不知道您还没有发布绘图代码绘图点的代码是从我的asp gridview(地址)中提取的,该部分工作正常。我的JSON也运行良好(推动添加更多对象)。但是cookie创建得太快了。我想我需要使用一个回调函数,但我真的不知道如何使用。有一个简单的解决方案使用承诺-然而,你可能会被客户端的地理编码速率限制所困扰吗?i、 e.“免费”API密钥每秒50次?或者你有一个高级密钥,所以没有客户端费率限制?好像我的页面在呼叫结束前正在重新加载。我明天再玩一会儿。谢谢。按钮单击是否添加到提交按钮?您需要添加一个preventDefault()调用,所以我今天要讨论这个问题,我的部分原始代码正在运行。这让我觉得谷歌在限制我。在网络中,如果地理编码被阻止,你能告诉我我在寻找什么吗?开发者工具控制台
// if btnClick is add to a submit button (in a form), like so
submitButtonElement.addEventListener('click', btnClick);
// or using jQuery something like
$(submitButtonElement).on('click', btnClick);
// or
$(submitButtonElement).click(btnClick);
// then you'll need to preventDefault to stop the form submitting
function btnClick(e) {
e.preventDefault(); // only required if handling a submit button
var geocoder = new google.maps.Geocoder();
var truckName =[];
var addr = [];
var Grid_Table = document.getElementById('GridView1');
var locations2 = [{ lat: -42.7545, lng: 147.735, addres: "3", geoAddress: "waa", truckName: "MX4" },
{ lat: -43.7545, lng: 142.735, addres: "1", geoAddress: "waa", truckName: "MX5" },
{ lat: -44.7545, lng: 143.735, addres: "2", geoAddress: "waa", truckName: "MX8" }];
var remaining = Grid_Table.rows.length - 2; // how many requests are pending
for (var row = 1; row < Grid_Table.rows.length - 1; row++) {
truckName.push(Grid_Table.rows[row].cells[0].textContent);
var addr = Grid_Table.rows[row].cells[4].textContent;
geocoder.geocode({ 'address': addr }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var loc = results[0].geometry.location;
var latitude = loc.lat();
var longitude = loc.lng();
locations2.push({ lat: latitude, lng: longitude, addres: addr, geoAddress: results[0].formatted_address, truckName: truckName[row] });
} // end if
remaining -= 1;
if (remaining === 0) {
// ************* ALL DONE HERE **********************
document.cookie = "locations=" + JSON.stringify(locations2);
// all done here - any other code should be here, or in a function called from here
}
}); // end geocoder
} // end for
}