2010-06-02 2 views
2

У меня возникли проблемы с получением данных JSON из моего приложения Rails для отображения на карте Google с использованием jQuery. В моем контроллере:Использование jQuery и Rails для отображения данных на карте Google

class PlacesController < ApplicationController 

    respond_to :html, :xml, :json 

    # GET /places 
    # GET /places.xml 
    # GET /places.json 
    def index 
    @places = Place.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render :json => @places } 
     format.xml { render :xml => @places } 
    end 
    end 

И тогда в моем map.js файл:

$(document).ready(function(){ 
    if (GBrowserIsCompatible()) { 
    var map = new google.maps.Map2($("#map").get(0)); 
     var burnsvilleMN = new GLatLng(44.797916,-93.278046); 
     map.setCenter(burnsvilleMN, 8); 
     map.setUIToDefault(); 

     $.getJSON("/places", function(json) { 
      if (json.Places.length > 0) { 
       for (i=0; i<json.Places.length; i++) { 
        var place = json.Places[i]; 
        addLocation(place); 
       } 
      } 
     }); 

     function addLocation(place) { 
      var point = new GLatLng(place.lat, place.lng);  
      var marker = new GMarker(point); 
      map.addOverlay(marker); 
     } 
     } 
}); 

$(window).unload(function() { GUnload(); }); 

Я адаптированный мой код из this tutorial - карта отображается нормально, но ни с одним из моих маркеров, присутствующих (добавленным рука). Я использую Rails 3 beta 3 и Ruby 1.9.1. Вывод на JSON кажется прекрасным - я могу получить доступ к данным на /places.json. Любая помощь будет высоко оценена - спасибо заранее!

ответ

1

Решенный! Я не понял, но Ruby выводит JSON как простой массив объектов, поэтому json.Places.length бессмысленна - json.length отлично работает. Новый код:

$.getJSON("/places", function(json) { 
    if (json.length > 0) { 
    for (i=0; i<json.length; i++) { 
     var place = json[i]; 
     addLocation(place); 
    } 
    } 
}); 

Все маркеры выглядят так, как ожидалось!

1

Вы пытались изменить путь в своем вызове getJSON на «/places.json»?

+0

Да, но, к сожалению, никакой радости! Также попробовали format.js {: render => @places} в контроллере с помощью «/places.js» ... – Budgie

Смежные вопросы