2017-03-01 12 views
-1

私はGoogleマップを持っていますが、マップにマーカーを追加するために動的に返されるデータ配列を渡したいと思いますが、マーカーを配置しないと作業。これは、関数add_markers()にデータ変数を渡した場合にのみ機能します。 なぜですか?これを修正する方法は?アヤックスの配列データをGoogleマップに渡すことができない

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

アヤックスからデータリターンが配列 ではないので、それはレスポンスオブジェクト

です
関連する問題