0

我们正在 Rails 中构建一个谷歌地图应用程序,该应用程序最初使用 javascript json 标记生成函数(使用数据对象上的 rails .to_json 方法)加载一些制造商。

然后我们在缩放操作上有一个监听器,它直接将新的 json 文件加载到上面的相同标记函数中。

在初始加载时,标记会正常显示,但在缩放时似乎没有新的标记出现。检查 rails 日志,正在调用 json 文件,因此问题要么与 json 数据的处理方式有关,要么与标记的传递方式有关。

你们中的任何人都可以看到问题所在吗?

    var map;
    function initialize() {
      var myOptions = {
        zoom: <%= @zoom %>,
        center: new google.maps.LatLng(<%= @centre %>),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }; 

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

      stream_json = (<%= raw(@stream.to_json) %>);
      parse_json(stream_json); 

      google.maps.event.addListener(map, 'zoom_changed', function() {
        json_url = "/test?bounds="+map.getBounds()+"&zoom="+map.getZoom();
        stream_json = $.getJSON(json_url);
        parse_json(stream_json);
      });

      function parse_json(json) {
        if (json.length > 0) { 
          var markers = [];
          for (i=0; i<json.length; i++) {
            var place = json[i];
            alert(place.longitude +','+place.latitude);
            // addLocation(place);
            markers[i] = new google.maps.Marker({
              map: map,
              position: new google.maps.LatLng(place.latitude, place.longitude)
            });
          }
        }
      };

    }

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

非常感谢您可以发送给我们的任何指示!

4

1 回答 1

1

您没有正确使用getJSON。这是一个异步调用,因此您需要提供一个回调:

  google.maps.event.addListener(map, 'zoom_changed', function() {
    json_url = "/test?bounds="+map.getBounds()+"&zoom="+map.getZoom();
    $.getJSON(json_url, function(data) {
      parse_json(data);
    });
  });
于 2012-07-10T13:01:24.500 回答