我正在使用 gon gem for rails,它允许您保存在 Controller 操作中定义的变量并在 JavaScript 中使用它们。当我在非 Ajax 设置中使用它时它工作正常,但是,我在执行 Ajax 请求时遇到成功使用它的问题。
问题:当发出 Ajax 请求时,我在 Controller 操作中分配给 gon 变量的 Ruby 变量在 JavaScript 中显示为“未定义”。
目标:我想在我的页面上触发一个 Ajax 请求,该请求: 1) 在 Controller 中点击一个 Action ,并将一个 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 的情况下执行此操作,我也愿意接受。
谢谢!
最佳答案
我最终通过执行以下操作解决了这个问题:
在我的 Controller 中:
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 gem 会很好,但这完成了工作。
关于javascript - 如何使用 ajax 在 Rails 中分配和访问 javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241073/