2014-01-20 52 views
4

我使用的是rails的gon gem,它允许您保存在控制器操作中定义的变量并在JavaScript中使用它们。当我在非Ajax设置中使用它时,它工作正常,但是,我在处理Ajax请求时遇到了成功使用它的问题。如何使用ajax在Rails中分配和访问JavaScript变量

问题:在JavaScript中将Ajax请求作为“未定义”出现时,我在控制器操作中分配给变量gon变量。

目标:我想触发我的页面,该页面在一个Ajax请求: 1)命中控制器动作,和Ruby的变量分配给坤变量。 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页面,但是我对于是否涉及到这个问题以及如何实现正确的解决方案感到困惑。另外,如果没有更好的方法来做到这一点,我也会接受。

谢谢!

回答

-1

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

/some_action.js.erb 

console.log('gon.my_ajax_var equals ' + <%= gon.my_ajax_var %>) 
+0

friedi,刚刚尝试过,但抛出了这个错误:“未定义的局部变量或方法'gon'为#<< Class:0x007fbfea377240>: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 %> 

本来可以很高兴地从g宝石中捎带出来,但是这样做完成了这项工作。

相关问题