如何使用ajax在Rails中分配和访问javascript变量
我正在使用gon gem for rails,它允许您保存控制器操作中定义的变量,并在JavaScript中使用它们。当我在非Ajax设置中使用它时,它工作得很好,但是,在处理Ajax请求时,我遇到了成功使用它的问题 问题:当Ajax请求在JavaScript中显示为“未定义”时,我在控制器操作中分配给gon变量的Ruby变量 目标:我想在我的页面上触发一个Ajax请求,该请求: 1) 点击控制器中的操作,并将Ruby变量分配给gon变量。 2) 然后呈现一个执行JavaScript的js.erb文件,其中一部分需要使用步骤1中定义的Ruby变量,并将其视为js变量 以下是步骤1中的示例操作:如何使用ajax在Rails中分配和访问javascript变量,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我正在使用gon gem for rails,它允许您保存控制器操作中定义的变量,并在JavaScript中使用它们。当我在非Ajax设置中使用它时,它工作得很好,但是,在处理Ajax请求时,我遇到了成功使用它的问题 问题:当Ajax请求在JavaScript中显示为“未定义”时,我在控制器操作中分配给gon变量的Ruby变量 目标:我想在我的页面上触发一个Ajax请求,该请求: 1) 点击控制器中的操作,并将Ruby变量分配给gon变量。 2) 然后呈现一个执行JavaScript的js.er
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'}
def some_action
@my_ajax_var = {some: 'info'}.to_json
end
我该怎么解决这个问题呢?我查看了gon.watch页面,但对于这是否与我遇到的问题有关以及如何实现正确的解决方案,我感到困惑。此外,如果没有gon,有更好的方法,我也愿意这样做
谢谢 我使用erb模板已经有一段时间了,但我认为您需要在erb文件中添加标记
/some_action.js.erb
console.log('gon.my_ajax_var equals ' + <%= gon.my_ajax_var %>)
/some_action.js.erb
log('gon.my_ajax_var等于'+)
我通过以下操作解决了这个问题:
在我的控制器中:
/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'}
def some_action
@my_ajax_var = {some: 'info'}.to_json
end
在我的相应视图中:
/some_action.js.erb
var my_ajax_var = <%= @my_ajax_var.html_safe %>
var my\u ajax\u var=
如果能背上gon gem就好了,但这样就完成了任务。friedi,刚刚尝试过,但抛出了一个错误:“未定义的局部变量或方法‘gon’for#”。这个错误对我来说很有意义,因为gon应该只定义为js变量,而不是ruby变量。