2014-01-20 49 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寶石中捎帶出來,但是這樣做完成了這項工作。

相關問題