【问题标题】:Pass rails variable to ajax in javascript将rails变量传递给javascript中的ajax
【发布时间】:2017-09-26 14:26:44
【问题描述】:

我是 Rails 新手。我正在尝试使用 ajax 并调用控制器方法。控制器方法创建一个实例变量,我认为它可用于 ajax 中的成功回调。

但是,每当我运行代码时,JS 控制台都会出现“test_array is 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);}
                })

【问题讨论】:

  • 如果你只记录整个数组,输出是什么? console.log(test_array)
  • 实际生成的 JavaScript 代码是什么样的?
  • @jon1467 如果我记录它给出的完整数组 - 在 JS 控制台上为 null。
  • @AndEnthu:请在问题中包含相关代码,然后表明问题已在之后更新。
  • @David 添加了 html 源代码。此外,ajax 函数被调用作为对使用 highcharts 的堆叠条形图的点击的响应。

标签: javascript jquery ruby-on-rails ajax


【解决方案1】:

在您的控制器中,您需要将 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 对象,您应该会看到来自控制器的信息。

【讨论】:

  • 好答案。当您发布时,我正在输入几乎完全相同的内容。我还将评论为什么 OP 不能在客户端使用 &lt;%= raw @tag_cloud_temp.to_json%&gt;,因为这似乎是一个常见的混淆来源。总之,不错!
  • 啊,谢谢,是的,这也是一个很好的学习点,当然!
  • @JonathanBowman 我做了你建议的修改。我现在得到的消息是 在 JS 控制台上。
  • @AndEnthu 很奇怪,我之前没有看到它说不可用......如果该变量不存在,它应该说未定义。你使用的是什么浏览器?您使用的是标准控制台还是第三方调试工具?此外,只需在另一个浏览器中尝试,使用内置控制台查看是否有任何不同。
  • @JonathanBowman...我之前尝试过 Firefox,现在我尝试过 chrome...现在我看到了对象..感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2014-04-15
  • 2011-09-02
  • 2013-03-05
相关资源
最近更新 更多