【问题标题】:How to Access Ruby Session Variable in Javascript如何在 Javascript 中访问 Ruby 会话变量
【发布时间】:2015-06-29 16:48:08
【问题描述】:

我已经创建了Ruby Session Variable 我需要在Javascript 中访问这个变量

让我们来看看这个场景

session[:note] = 'Some Notes' 这是在Ruby on Rails 中完成的

现在我想访问这个就像

var session_val = 用于访问以上会话变量的 js-code。

它不是 js.erb 我知道它是否是 js.erb,我们可以像这样访问

var sesion_val = "<%= session[:note] %>"

TIA

【问题讨论】:

    标签: javascript ruby session


    【解决方案1】:

    您可以使用 HTML5 data 方法来访问变量。

    假设,您的 JS 函数 正在从按钮调用。 因此,您可以将该按钮定义为:

    <button class="btn" data-session="<%= session[:note]%>" onclick="seesionCheck()">Hello</button>
    

    现在,在您的 JS 函数中,您可以通过以下方式访问变量:

    $(".btn").data('session');
    

    【讨论】:

    • 如果你只使用这个单一的变量,那么 HTML DOM 的大小不会像你想象的那样增加。
    • @Veeru,所以它应该是公认的答案,对吧?
    【解决方案2】:

    会话在服务器端。您的 JS 在客户端。没有办法直接从 JS 读取会话。有两种方法可以绕过它:

    • 在渲染视图时播种值。正如你所说,你可以把它放在你的ERb中。但是,更好的方法是使用 JSON:

      var session_val = <%= session[:note].to_json %>
      

      这避免了转义(或缺少转义)可能出现的问题。

    • 通过 AJAX 询问服务器

    【讨论】:

    • Rails 的会话只是浏览器 cookie 对吧?服务端怎么样?
    • @LirenYeo:Rails 默认有 cookie 会话,但你可以使用另一个 session_store。 Cookie 限制为 4Kb,根据您的使用情况可能会造成安全漏洞,并且会增加通信开销;它们的优点是服务器不需要存储东西,因此它们通过稍微增加通信成本来稍微加快服务器端的速度。虽然 cookie 在客户端可用,但它们通常被认为是“服务器的东西”,而不是与客户端混淆。 (虽然我可能应该在我的回答中缓和一下“不可能”。)
    • 我明白了!谢谢你的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2013-09-17
    • 2013-08-16
    • 1970-01-01
    • 2011-11-25
    • 2012-04-08
    • 2011-10-23
    相关资源
    最近更新 更多