我正在开发一个简单的rails应用程序,允许用户输入邮政编码以查找该地区的酒吧和餐馆列表。
着陆页的邮政编码只有一个表单字段。提交邮政编码后,该应用程序会返回一个位置列表,并使用Google的api呈现带有图钉的地图。
这是我的javascript,目前位于layouts / application.html.erb:
function initialize() {
var pins = <%= raw @pins.as_json -%>;
var map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 12,
center: new google.maps.LatLng(pins[0][1], pins[0][2]),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker, i;
for (i = 0; i < pins.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(pins[i][1], pins[i][2]),
map: map,
title:pins[i][0]
});
};
}
这是来自locations_controller.rb的我的控制器
def index
@locations = Location.all
@results = @locations.where(params[:zip])
@pins = @results.map{|r| [r.name, r['latitude'], r['longitude']]}
end
所有这一切都很好。但是,我还希望在用户首次登陆页面时根据当前位置显示地图,因此我按如下方式修改了控制器:
def index
# @ip = request.ip
@ip = "152.86.199.175" #set a default ip since I am working locally
Geocoder.configure(:ip_lookup => :telize) #without this, my api request times out
user_zip = Geocoder.search(@ip).first.data['postal_code']
zip = params[:zip].present? ? params[:zip] : user_zip
@locations = Location.all
@results = @locations.where(:zip => zip)
@pins = @results.map{|r| [r.name, r['latitude'], r['longitude']]}
end
如果我在rails控制台中运行它,修改后的代码就可以工作了。我能够找到用户的zip并根据它生成一个引脚列表。但是,它在应用程序中不起作用。 javascript函数从控制器获取的引脚数组为空。
我一直试图调试这几天。我最好的猜测是javascript在控制器运行之前运行并且引脚阵列没有构建。我尝试在$(document).ready()和$(document).on(&#34; pageload&#34;)中包装函数但是没有帮助。我还尝试在javascript中创建一个条件,检查是否有任何引脚,如果没有,则向控制器发出ajax请求。不幸的是,我结束了两个请求而没有引脚。
我对关于javascript时间的假设是否正确?任何人都可以解释为什么javascript函数在一个实例中获取一个引脚数组而在另一个实例中没有?有没有人有任何建议让这项工作?
谢谢
答案 0 :(得分:0)
我刚检查了Geocoder.search(@ip).first.data
,['postal_code']
的结果没有['zip_code']
密钥,而是有一个Demo.SayHello
密钥可供您使用,也许这就是问题
答案 1 :(得分:0)
好的,代码正常运行。 Geocoder正在返回附近的拉链,而不是拉链。该zip中的数据库中没有相应的条目。这就是为什么我得到一个空阵列。尴尬。