Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 地理编码-如何等待首先解析所有位置,然后设置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

所以我的地图起作用了。但它只绘制了前3个位置。我知道这是因为地理编码是异步的。但就我的一生而言,我不知道如何等待。我希望所有的地理编码都先完成,然后设置cookie。请帮忙

如果您不需要担心客户端的地理编码速率限制为50/秒,那么对代码的更改非常小

我添加了一个名为remaining的var,它是用预期的地理编码请求数设置的

然后在地理编码回调中,减量剩余,当为0时,全部完成

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
}