Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ajax在Rails中分配和访问javascript变量_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

如何使用ajax在Rails中分配和访问javascript变量

如何使用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

我正在使用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'}
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变量。