如何将javascript变量传递给rails erb

时间:2013-08-24 09:50:33

标签: javascript jquery ruby-on-rails ruby ajax

好的,我知道答案是AJAX调用,但我有一个特殊的问题: 一切都发生在我的主页上,分两步:

  

1-主要用户访问根“/”

     

2-在我的索引页面上我有一个JS来获取他当前的位置   (纬度和经度)并重新加载包含信息的页面   没有用户交互的手 - 然后显示页面正确。

问题:我不知道如何进行ajax调用(我不想重新加载执行window.location的所有布局),我只想要索引.html.erb,明白了吗?但是这个人太难了,我就这样做了一个月就做不到了:(拜托,有人帮我,我真的需要。非常感谢。

2 个答案:

答案 0 :(得分:0)

当您检索当前位置时,您在Javascript中有一个回调,它告诉您所有内容都已完成。在这个回调中,您可以访问Javascript中的位置,对吗?

然后你可以在你的Rails应用程序中向一条路线发布一个AJAX请求。例如:

的routes.rb

post "/user_position" => "position#update"

position_controller.rb

class PositionController < ApplicationController
   def update
     puts params
     # here store the params in your db, or do whatever you want
   end
end

JS:

function successGeoCallback(data) {
   $.post("/user_position", { lat: data.latitude, lng: data.longitude })
   .done(function(data) {
      alert("Position was stored" + data);
    });
}

答案 1 :(得分:0)

您不需要触摸控制器。在erb文件中,类似这样的内容可以起作用:

<script>
  if (<%=params[:geo_location].blank? ? 'true' : 'false' %>) {
    locationData = DO_YOUR_THING_HERE;
    $.get('/', { geo_location: locationData});
  }
</script>

这样,当页面首次加载时,将发送带参数的ajax请求。 页面第二次加载后,可以从erb对象的params[:geo_location]文件访问位置数据。


如果您只是想刷新页面的一部分,可以执行以下操作:

$('#container').load('/A_NEW_CONTROLLER_PATH', {geo_location: locationData});

并设置A_NEW_CONTROLLER_PATH以仅返回您感兴趣的部分HTML。您可以在控制器操作中使用render 'index', layout: false执行此操作。