好的,我知道答案是AJAX调用,但我有一个特殊的问题: 一切都发生在我的主页上,分两步:
1-主要用户访问根“/”
2-在我的索引页面上我有一个JS来获取他当前的位置 (纬度和经度)并重新加载包含信息的页面 没有用户交互的手 - 然后显示页面正确。
问题:我不知道如何进行ajax调用(我不想重新加载执行window.location
的所有布局),我只想要索引.html.erb,明白了吗?但是这个人太难了,我就这样做了一个月就做不到了:(拜托,有人帮我,我真的需要。非常感谢。
答案 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
执行此操作。