繁体   English   中英

如何将JavaScript变量传递给Rails erb

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM