javascript函数在初始页面加载时接收一个空数组

时间:2015-08-05 04:07:57

标签: javascript ruby-on-rails google-maps

我正在开发一个简单的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函数在一个实例中获取一个引脚数组而在另一个实例中没有?有没有人有任何建议让这项工作?

谢谢

2 个答案:

答案 0 :(得分:0)

我刚检查了Geocoder.search(@ip).first.data['postal_code']的结果没有['zip_code']密钥,而是有一个Demo.SayHello密钥可供您使用,也许这就是问题

答案 1 :(得分:0)

好的,代码正常运行。 Geocoder正在返回附近的拉链,而不是拉链。该zip中的数据库中没有相应的条目。这就是为什么我得到一个空阵列。尴尬。