Google Maps AJAX调用多个标记

时间:2014-02-19 17:13:50

标签: jquery ajax google-maps

我正在使用jQuery $ .post来点击PHP页面,该页面以下列格式返回我的标记:

[[' LOCATION1&#39 ;, LAT,LONG,1],[' LOCATION2',LAT,LONG,2]]

我认为问题在于javascript将此视为字符串而不是数组。这是我的jQuery。

$.post("getdata.php")
    .done(function(locations) {
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 7,
          center: new google.maps.LatLng(LAT, LONG),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        var infowindow = new google.maps.InfoWindow();

        var marker, i;

        for (i = 0; i < locations.length; i++) { 
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
          });

          google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
              infowindow.setContent(locations[i][0]);
              infowindow.open(map, marker);
            }
          })(marker, i));
        }   
    });

我尝试手动将locations变量设置为我的PHP结果,并且它可以工作,这就是为什么我认为它是简单的AJAX变量如何进入,然后它是如何尝试解析它。在此先感谢。

编辑:我最终改变了点的格式,比如位置; Lat; Long | Location2; Lat; Long |

然后我分开了&#39; |&#39;然后拆分&#39;;&#39;创建2个数组来解析。非常丑陋的解决方案,但它最终工作。

1 个答案:

答案 0 :(得分:0)

尝试使用console.log()检查响应,或者在迭代之前直接执行jQuery.parseJSON。

$.post("getdata.php")
    .done(function(_locations) {
        locations = jQuery.parseJSON(_locations);
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 7,
          center: new google.maps.LatLng(LAT, LONG),
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        var infowindow = new google.maps.InfoWindow();

        var marker, i;

        for (i = 0; i < locations.length; i++) { 
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
          });

          google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
              infowindow.setContent(locations[i][0]);
              infowindow.open(map, marker);
            }
          })(marker, i));
        }   
    });