0

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

1-主用户访问根“/”

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

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

4

2 回答 2

0

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

然后,您可以将 AJAX 请求发布到 Rails 应用程序中的路由。例如:

路线.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);
    });
}
于 2013-08-24T10:00:13.470 回答
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在控制器操作中执行此操作。

于 2013-08-24T11:42:40.017 回答