在javascript中将rails变量传递给ajax

在javascript中将rails变量传递给ajax,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我不熟悉rails。我正在尝试使用ajax并调用控制器方法。控制器方法创建了一个实例变量,我认为它可以用于ajax中的成功回调 但是,每当我运行代码时,JS控制台都会给出test_array is null错误。请提出解决方案并深入了解正在发生的情况。代码如下 我已经在互联网上彻底研究了这个问题,包括SO,但没有一个答案似乎适合我的问题 sentifiu controller.rb def render_phrase @tag_cloud_temp = [{text: 'Hello', weig

我不熟悉rails。我正在尝试使用ajax并调用控制器方法。控制器方法创建了一个实例变量,我认为它可以用于ajax中的成功回调

但是,每当我运行代码时,JS控制台都会给出test_array is null错误。请提出解决方案并深入了解正在发生的情况。代码如下

我已经在互联网上彻底研究了这个问题,包括SO,但没有一个答案似乎适合我的问题

sentifiu 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);
        }
       })

在控制器中,您需要将JSON呈现回AJAX调用,如下所示:

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

render json: {
  tag_cloud_temp: @tag_cloud_temp
}
// in ajax call
success: function(data) {
  console.log(data);
}
然后,在AJAX调用中,您将希望从该渲染接收数据,如下所示:

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

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

如果查看数据对象,您应该会看到来自控制器的信息。

在控制器中,您需要将JSON呈现回AJAX调用,如下所示:

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

render json: {
  tag_cloud_temp: @tag_cloud_temp
}
// in ajax call
success: function(data) {
  console.log(data);
}
然后,在AJAX调用中,您将希望从该渲染接收数据,如下所示:

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

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


如果您查看数据对象,您应该会看到来自控制器的信息。

如果您只记录完整的阵列,输出是什么?console.logtest\u array实际生成的JavaScript代码是什么样子的?@jon1467如果我在JS控制台上记录它给出的完整数组-null。@AndEnthu:请在问题中包含相关代码,然后指出问题已经更新。@David已经添加了html源代码。另外,ajax函数被调用作为对使用highcharts的堆叠条形图的单击的响应。如果您只记录完整的数组,输出是什么?console.logtest\u array实际生成的JavaScript代码是什么样子的?@jon1467如果我在JS控制台上记录它给出的完整数组-null。@AndEnthu:请在问题中包含相关代码,然后指出问题已经更新。@David已经添加了html源代码。另外,ajax函数被调用作为对使用highcharts的堆叠条形图的单击的响应。回答得好。你发帖的时候我也在打字。我还想评论一下为什么OP不能在客户端使用,因为这似乎是一个常见的混淆源。无论如何,很好!啊,谢谢,是的,这也是一个很好的学习点,当然@JonathanBowman我做了你建议的修改。我现在收到的消息是在JS控制台上的。@AndEnthu奇怪,我以前没有看到它说不可用……如果该变量不存在,它应该说未定义。你用的是什么浏览器?您使用的是标准控制台还是第三方调试工具?另外,只需在另一个浏览器中试用,使用内置控制台查看是否有任何不同。@JonathanBowman…我之前在firefox上试用过,现在在chrome上试用过…现在我看到了对象..谢谢你的帮助回答得好。你发帖的时候我也在打字。我还想评论一下为什么OP不能在客户端使用,因为这似乎是一个常见的混淆源。无论如何,很好!啊,谢谢,是的,这也是一个很好的学习点,当然@JonathanBowman我做了你建议的修改。我现在收到的消息是在JS控制台上的。@AndEnthu奇怪,我以前没有看到它说不可用……如果该变量不存在,它应该说未定义。你用的是什么浏览器?您使用的是标准控制台还是第三方调试工具?另外,只需在另一个浏览器中试用,使用内置控制台查看是否有任何不同。@JonathanBowman…我之前在firefox上试用过,现在在chrome上试用过…现在我看到了该对象。谢谢您的帮助