2017-09-26 35 views
1

我是新來的rails。我正在嘗試使用ajax並調用控制器方法。控制器方法創建了一個實例變量,我認爲這個變量可以在ajax中成功回調。將導軌變量傳遞給javascript中的ajax

但是,每當我運行代碼時,JS控制檯都會給出「test_array爲null」錯誤。請提出解決方案並瞭解正在發生的事情。代碼如下。

我已經在互聯網上徹底研究過這個問題(包括SO),但沒有一個答案似乎適合我的問題。

sentiscores_controller.rb

def render_phrase 
@tag_cloud_temp = [{text: 'Hello', weight: 1000},{text: 'World!', weight: 1100}] 
end 

index.html.erb

$.ajax({ 
     type: 'GET', 
     url: '/sentiscores/render_phrase', 
     data: {'senti_score': 5}, 
     success: function(){ 
     var test_array = <%= raw @tag_cloud_temp.to_json%>; 
     console.log(test_array[0]['text']); 
     }, 
     error: function(exception){ 
     console.log("Error! : "+exception); 
     } 
     }) 

實際的HTML源代碼如下所示

$.ajax({ 
      type: 'GET', 
      url: '/sentiscores/render_phrase', 
      data: {'senti_score': 5}, 
      success: function(){ 
        var test_array = null; 
        console.log(test_array[0]['text']); 
        }, 
      error: function(exception){console.log("Error! : "+exception);} 
       }) 
+0

如果您只記錄完整陣列,輸出是什麼? 'console.log(test_array)' – jon1467

+0

實際生成的JavaScript代碼是什麼樣的? – David

+0

@ jon1467如果我記錄它給出的完整數組 - null在JS控制檯上。 – AndEnthu

回答

5

在你的控制,你會想以render的JSON回到AJAX調用,如下:

# controller method  
@tag_cloud_temp = [{text: 'Hello', weight: 1000},{text: 'World!', weight: 1100}] 

render json: { 
    tag_cloud_temp: @tag_cloud_temp 
} 

然後,在你的AJAX調用,你會想從render收到的data,就像這樣:

// in ajax call 
success: function(data) { 
    console.log(data); 
} 

如果你看一下data對象,你應該看到您的信息控制器。

+0

很好的答案。當你發佈時,我正在輸入幾乎完全相同的東西。我也想評論爲什麼OP不能在客戶端使用'<%= raw @ tag_cloud_temp.to_json%>',因爲這似乎是一個常見的混淆來源。反正,很好! – jvillian

+0

啊,謝謝,是的,這也是一個很好的學習點,當然! –

+0

@JonathanBowman我做了你所提出的修改。我現在得到的消息是在JS控制檯上的。 – AndEnthu