[英]How to pass javascript variable to rails erb
好的,我知道答案是AJAX调用,但是我有一个特殊的问题:一切都会在我的主页上分两个步骤进行:
1-主要用户访问根目录“ /”
2-在我的索引页面上,我有一个JS,它可以获取他的当前位置(经度和纬度),并在没有用户交互的情况下将手中的信息重新加载到页面中,然后正确显示该页面。
问题 :我不知道如何进行ajax调用(我不想通过window.location
重新加载所有布局),我只需要index.html.erb,知道吗? 但是,这太难了,我在这个上大概一个月了,而且做不到:(请有人帮我,我真的很需要。非常感谢。
检索当前位置时,您会在Javascript中有一个回调,告诉您一切都已完成。 在此回调中,您可以访问Javascript中的位置,对吗?
然后,您可以将AJAX请求发布到Rails应用程序中的路由。 例如:
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);
});
}
您无需为此触摸控制器。 在您的erb
文件中,类似以下内容可能会起作用:
<script>
if (<%=params[:geo_location].blank? ? 'true' : 'false' %>) {
locationData = DO_YOUR_THING_HERE;
$.get('/', { geo_location: locationData});
}
</script>
这样,当页面首次加载时,将发送带有参数的ajax请求。 页面第二次加载后,可以从params[:geo_location]
对象的erb
文件访问位置数据。
如果您只想刷新页面的一部分,则可以执行以下操作:
$('#container').load('/A_NEW_CONTROLLER_PATH', {geo_location: locationData});
并设置一个A_NEW_CONTROLLER_PATH以仅返回您感兴趣的部分HTML。您可以在控制器操作中使用render 'index', layout: false
来实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.