我正在尝试使用geokit和Google Geocoder获取用户的城市。我从ajax请求中获取用户的城市:
var geocoder;
var map;
function initialize(position) {
geocoder = new google.maps.Geocoder();
var lat = position.coords.latitude;
var long = position.coords.longitude;
getCitizenCity(lat, long);
}
function getCitizenCity(lat, long) {
$.ajax({
type: "POST",
url: "/set_citizen_city",
dataType: 'json',
data: { lat: lat, long: long },
success: function(data) {
console.log(data);
},
error: function(data) {
console.log(data);
}
});
}
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(initialize);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
google.maps.event.addDomListener(window, 'load', getLocation);
rails代码(HomeController.rb):
class HomeController < ApplicationController
attr_reader :citizen_city
def index
end
def set_citizen_city
lat = params[:lat]
long = params[:long]
address = Geokit::Geocoders::GoogleGeocoder.reverse_geocode("#{lat}, #{long}")
@citizen_city = address.city
respond_to do |format|
format.json { render :json => {:message => "Success"} }
end
end
end
我注意到如果我做了
puts @citizen_city
在方法“set_citizen_city”中,正确的城市显示在控制台中。 但是,如果我尝试
puts @citizen_city
在方法“index”中,控制台中不显示任何内容。
如何在控制台上显示城市名称?
答案 0 :(得分:0)
我认为你在索引中看不到@citizen_city
是因为它没有在那里定义。
在每个请求中,Rails会执行应用程序的新实例(据我所知),因此如果未在同一操作中定义控制器实例变量,则无法访问它们。为了解决这个问题,我建议您将lat
和long
参数保存在数据库中,然后在索引中执行与set_citizen_city
中相同的操作,然后再定义@citizen_city
从数据库中获取坐标(或者可能是会话参数,如果你需要的话)