【问题标题】:How to assign and access a javascript variable in Rails using ajax如何使用 ajax 在 Rails 中分配和访问 javascript 变量
【发布时间】:2014-02-10 00:58:00
【问题描述】:

我正在使用 gon gem for rails,它允许您保存在控制器操作中定义的变量并在 JavaScript 中使用它们。当我在非 Ajax 设置中使用它时它工作正常,但是在执行 Ajax 请求时我遇到了成功使用它的问题。

问题:当 Ajax 请求在 JavaScript 中显示为“未定义”时,我在控制器操作中分配给 gon 变量的 Ruby 变量。

目标:我想在我的页面上触发一个 Ajax 请求,它: 1) 在控制器中点击一个动作,并将一个 Ruby 变量分配给一个 gon 变量。 2)然后渲染一个执行JavaScript的js.erb文件,其中一部分需要把步骤1中定义的Ruby变量,当作一个js变量来处理。

这是第 1 步中的示例操作

def some_action
 gon.my_ajax_var = {some: 'info'}
end

这是它呈现的示例 js.erb 文件:

/some_action.js.erb

console.log('gon.my_ajax_var equals ' + gon.my_ajax_var)  //this doesn't work! comes out as 'undefined' when I expected {some: 'info'}

关于如何解决这个问题有什么想法吗?我查看了 gon.watch 页面,但我很困惑这是否与我遇到的这个问题有关,以及如何实施正确的解决方案。此外,如果有更好的方法可以做到这一点而无需 gon,我也愿意接受。

谢谢!

【问题讨论】:

    标签: javascript ruby-on-rails ajax


    【解决方案1】:

    前段时间我使用了erb模板,但我认为你需要在你的erb文件中添加标签。

    /some_action.js.erb
    
    console.log('gon.my_ajax_var equals ' + <%= gon.my_ajax_var %>)
    

    【讨论】:

    • friedi,刚刚尝试过,但是抛出了这个错误:“未定义的局部变量或方法 `gon' for #:0x007fbfe91c9958>”。这个错误对我来说很有意义,因为 gon 应该只定义为 js 变量而不是 ruby​​ 变量。
    【解决方案2】:

    我最终通过以下方式解决了这个问题:

    在我的控制器中:

    def some_action
      @my_ajax_var = {some: 'info'}.to_json
    end
    

    在我的相应观点中: /some_action.js.erb

    var my_ajax_var = <%= @my_ajax_var.html_safe %>
    

    如果能够搭载 gon 宝石会很高兴,但这完成了工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      相关资源
      最近更新 更多