Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.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对象返回长度0,即使对象不是空的_Javascript_Jquery_Google Maps - Fatal编程技术网

javascript对象返回长度0,即使对象不是空的

javascript对象返回长度0,即使对象不是空的,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我正在尝试向谷歌地图添加多个标记 我的代码: function createMarkers(myArray) { var myOptions = { zoom:6, center: new google.maps.LatLng(28.704059, 77.102490) }; var map = new google.maps.Map(document.getElementById("map_canvas"), myOpti

我正在尝试向谷歌地图添加多个标记

我的代码:

function createMarkers(myArray) {
       var myOptions = {
        zoom:6,
        center: new google.maps.LatLng(28.704059, 77.102490)
      };

      var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      //shows the object in console with length of 3
      console.log(myArray);

      //but here length return is 0 so no Entry on FOR Loop
      console.log(myArray.length);


    for(var x=0;x<myArray.length;x++){

      var marker = new google.maps.Marker({
          position: myArray[i],
          map: map,
          title: 'Hello World!'
        });
    }

}

function initialize(){
    var geocoder = new google.maps.Geocoder();
    var cityArray   =   ['Agra','Delhi','Varanasi'];

      var myLatLng =    [];

     for(var i=0;i<cityArray.length;i++){

      geocoder.geocode({
        'address': cityArray[i]+', India'
      }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          var Lat = results[0].geometry.location.lat();
          var Lng = results[0].geometry.location.lng();
          myLatLng.push({'lat': Lat, 'lng': Lng});


        } else {
          alert("Something got wrong " + status);
        }
    });
    }

  //console.log(myLatLng);
  createMarkers(myLatLng);
}

google.maps.event.addDomListener(window, "load", initialize);

<style>
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
</style>

<div id="map_canvas"></div>
函数createMarkers(myArray){
变量myOptions={
缩放:6,
中心:新google.maps.LatLng(28.704059,77.102490)
};
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
//在控制台中显示长度为3的对象
log(myArray);
//但这里的长度返回值是0,所以FOR循环中没有条目
log(myArray.length);

对于注释中所述的(var x=0;x,您的问题在于异步回调

当JS执行“异步”操作(如jQuery
ajax
geocoder.geocode
)时,该操作需要一些时间,但此请求下面的代码将在不等待的情况下执行

这就是为什么
geocoder.geocode
中有一个功能,可以检查它是否成功,这一个:

   function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      var Lat = results[0].geometry.location.lat();
      var Lng = results[0].geometry.location.lng();
      myLatLng.push({'lat': Lat, 'lng': Lng});

      createMarkers(myLatLng); // THIS IS A NEW LINE

    } else {
      alert("Something got wrong " + status);
    }
仅在您的呼叫完成后执行。
只需将
CreateMarkets(myLatLng);
传递到其中,它就可以按计划工作。

执行CreateMarkets(myLatLng);,数组不会被填充。这是一个异步操作,当调用geocode()时,数组会被填充方法被执行。谢谢我解决了它。谢谢你!有什么特别的原因吗?我的答案不正确吗?我没有链接到资源吗?它没有帮助和解释性吗?教我吧,这样我将来在你眼中会做得更好