2017-03-01 68 views
-1

我有一个谷歌地图,我想传递一个动态返回的数据数组,以便将标记添加到地图中,但是当我这样做时,标记不会工作。它只适用于将数据变量传递给函数add_markers()的情况。 为什么?以及如何解决这个问题?为什么我无法将数组数据从ajax传递到谷歌地图

function RelatedLocationAjax() { 
      var lat = $("#lat").val(); 
      var lng = $("#lng").val(); 
      var srv = $("#ServiceId").val(); 
      var data = [ 
       ["john","Do this service 1 <a href=''>more</a>", "29.957051,30.914529", "http://maps.google.com/mapfiles/ms/icons/blue.png"], 
       ["peter", "Do this service 1 <a href=''>more</a>", "29.956051,30.913529", "http://maps.google.com/mapfiles/ms/icons/green.png"], 
       ["sara","Do this service 1 <a href=''>more</a>","29.955051,30.912529", "http://maps.google.com/mapfiles/ms/icons/red.png"], 
      ]; 
      $.ajax({ 
       type: "POST", 
       url: "<?= base_url() ?>services/closest_locations", 
       data:"data="+ '{ "latitude":"'+ lat+'", "longitude": "'+lng+'", "ServiceId": "'+srv+'" }', 
       success:function(data) { 
// here i pass the data array to add_markers and doesn't work 
        add_markers(data); 
       } 
      }); 
     } 

     function add_markers(data){ 
     var marker, i; 
     var bounds = new google.maps.LatLngBounds(); 
     var infowindow = new google.maps.InfoWindow(); 

     document.getElementById('info').innerHTML = "found " + data.length + " data<br>"; 
     for (i = 0; i < data.length; i++) { 
      var coordStr = data[i][2]; 
      var coords = coordStr.split(","); 
      var pt = new google.maps.LatLng(parseFloat(coords[0]), parseFloat(coords[1])); 
      bounds.extend(pt); 
      marker = new google.maps.Marker({ 
       position: pt, 
       map: map, 
       icon: data[i][3], 
       address: data[i][1], 
       title: data[i][0], 
       html: data[i][0] + "<br>" + data[i][1] 
      }); 
      markers.push(marker); 
      google.maps.event.addListener(marker, 'click', (function (marker, i) { 
       return function() { 
        infowindow.setContent(marker.html); 
        infowindow.open(map, marker); 
       } 
      }) 
      (marker, i)); 
     } 
     map.fitBounds(bounds); 
    } 

回答

0

因为从AJAX的数据返回不是数组 它是响应对象

相关问题