2012-03-16 89 views
0

我试图在使用API​​ V3的Google地图上获取多个标记。 我想要显示的标记是一个名为beachflag.png的粉红色正方形。当我的程序到达setMarkers函数时,在$ .each循环中创建的数组内部的值将丢失。警报功能显示为未定义。我不明白这是如何实现的,因为我已经在脚本的开头声明了这个数组(全局)。 但是,当循环遍历位置数组的底部for循环只有一个值时。我推入数组的所有值(位置,纬度和长度)都消失了。我一直在关注v3的谷歌示例api的示例(https://google-developers.appspot.com/maps/documentation/javascript/examples/icon-complex?hl=fr-FR),但它并不适合我。 这是我的实际测试页: otakufinder

var userLat=""; 

var userLong=""; 

var map; 

var eventsLat=[]; 

var eventsLong=[]; 

locations=[]; 

var i=0; 

    jQuery(window).ready(function(){ 

       jQuery("#btnInit").click(initiate_geolocation); 

      }); 

      function initiate_geolocation() { 

       //watch position 
       navigator.geolocation.getCurrentPosition(handle_geolocation_query,handle_errors); 

      } 

      function handle_errors(error) 
      { 
       switch(error.code) 
       { 
        case error.PERMISSION_DENIED: alert("user did not share geolocation data"); 
        break; 

        case error.POSITION_UNAVAILABLE: alert("could not detect current position"); 
        break; 

        case error.TIMEOUT: alert("retrieving position timed out"); 
        break; 

        default: alert("unknown error"); 
        break; 
       } 
      } 

      function handle_geolocation_query(position){ 


       userLat=position.coords.latitude; 

       userLong=position.coords.longitude; 

       var userLocation = new google.maps.LatLng(userLat, userLong); 

       var mapOptions = { 
         zoom: 8, 
         center: userLocation, 
         mapTypeId: google.maps.MapTypeId.ROADMAP 
       }; 

       map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions); 


       var marker= new google.maps.Marker({ 
       position: new google.maps.LatLng(userLat, userLong), 
       title: "Hello Testing", 
       clickable: true, 
       map: map 
       }); 


      var numRand = Math.floor(Math.random()*1000) 

       $.get('http://leobee.com/otakufinder/scripts/geoloco.php?userLat='+userLat+'&userLong='+userLong+'&randNum='+numRand, 



        function (data){ 


         var jsontext = data; 

         var contact = JSON.parse(jsontext); 




         $.each(contact , function() { 

          $('#otakuEvents').append(
          '<div>' 
          + this.event_name 
          + '</div><div>' 
          + this.lat +" "+this.elong 
          + 
          '</div>' 


         );// end div 
       eventsLat.push(this.lat); 

       eventsLong.push(this.elong); 

       locations.push(this.event_name); 


       });// end .each 


setMarkers(map,locations); 

function setMarkers(map, locations) { 
alert (" in setMarkers function "+ eventsLat[i]);//output undefined 
var image = new google.maps.MarkerImage('images/beachflag.png', 
new google.maps.Size(20, 32), 
new google.maps.Point(0,0), 
new google.maps.Point(0, 32)); 
var shadow = new google.maps.MarkerImage('../images/beachflag.png', 
new google.maps.Size(37, 32), 
new google.maps.Point(0,0), 
new google.maps.Point(0, 32)); 
var shape = { 
coord: [1, 1, 1, 20, 18, 20, 18 , 1], 
type: 'poly' 
}; 

for (var i = 0; i < locations.length; i++) { 
alert (" inside for loop "+ eventsLat[i]);// output has only one variable init 
var myLatLng = new google.maps.LatLng(eventLat[i], eventLong[i]); 
var marker = new google.maps.Marker({ 
position: myLatLng, 
map: map, 
shadow: shadow, 
icon: image, 
shape: shape, 

}); 
} 
} 
      }// end data callback 

     );// end getJson 
} 
+0

例子... jqxhr.complete(function(){ for(i = 0; i Leoa 2012-03-17 03:12:20

回答

1

你有一个错字在那里,你填充eventsLat[]eventsLong[],但您尝试访问eventLat[]eventLong[]这里:

​​
+0

我修正了错字,问题仍然存在。数组中的值不会被输入到完整的函数中。 – Leoa 2012-03-17 03:09:50

+0

嗨大家好,我正努力克服这个程序的'异步陷阱'。 我根据jQuery的网站做了一些研究并重新构建了部分代码。我已将此版本上传到我的实时测试页面。 http://leobee.com/otakufinder/。我觉得很奇怪,完整的函数会提示成功,并且没有加载任何信息。我是否需要将变量放在隐藏的输入字段中,以便程序可以访问变量的值?我不确定接下来要做什么。没有足够的空间来通过评论中的新(无打字)代码。 – Leoa 2012-03-17 03:37:33

+0

在'alert(“second complete”)'之前查看更新演示中的最后一个循环;',您没有在循环内创建标记,则在循环之后创建1个标记。循环结束后,我指向数组的末尾,因此无法创建此单个标记。 – 2012-03-17 03:42:01

相关问题