【问题标题】:returning JSON from ruby helper function to javascript将 JSON 从 ruby​​ 辅助函数返回到 javascript
【发布时间】:2011-10-12 11:07:54
【问题描述】:

我有一个 Ruby on Rails 应用程序。单击按钮时,我有一些 AJAX 调用应该返回 JSON。

以下是相关的代码行:

文件“index.js.erb”:

var myJson = <%= chart_data %>;

文件“parameter_helper.rb”:

module ParameterHelper
  def chart_data
    valRet1 = {
      :name => "Total Traffic",
      :data => [
        ['Sep 9, 1970', 0],
        ['Sep 14, 1970', 0.94],
        ['Sep 20, 1970', 0.46]

    ]
    }

    valRet2 = [1, 2]

    return valRet1

  end
end

问题是当我从 chart_data 返回 valRet2 时,我在 index.js.erb 文件中获得了所需的数组。但是如果我尝试返回 valRet1,我会得到错误。

我玩过 ActiveSupport::JSON.encode、jQuery.parseJSON、将我的 JSON 对象转换为字符串和转义引号等。似乎没有任何效果。

以下导致错误:

return '[["Sep 9, 1970", 0],
        ["Sep 14, 1970", 0.94],
        ["Sep 20, 1970", 0.46]]'

以下也导致了错误:

result = [['Sep 9, 1970', 0],
          ['Sep 14, 1970', 0.94],
          ['Sep 20, 1970', 0.46]]
return '"' + ActiveSupport::JSON.encode(result) + '"'

以下正确返回:

return "[['Sep 9, 1970', 0],
        ['Sep 14, 1970', 0.94],
        ['Sep 20, 1970', 0.46]]"

数组(最好是散列)需要动态创建(从数据库中获取值),因此不能像上面正确返回数据的情况那样是文字。

我们将不胜感激。

环境:

OS: Windows 7
Rails: 3.1.0
Ruby: 1.9.2p290 (2011-07-09) [i386-mingw32]

问候,

伊姆蒂亚兹

【问题讨论】:

    标签: javascript ruby-on-rails ruby json helper


    【解决方案1】:

    对数组使用:to_json方法

    valRet1.to_json
    

    或来自控制器:

    respond_to do |format|
      format.json do
        render :json => valRet1
      end
    end
    

    【讨论】:

    • 哦,将gem 'json' 添加到您的Gemfile 并运行bundle install
    • 还是不行。我也尝试过 ActiveSupport::JSON.encode(valRet1)。此外,valRet1 是一个哈希。
    • 你也可以使用 ActiveSupport 的 JSON 模块来代替 gem。
    • :to_json 扩展数组、哈希、字符串的方法...顺便问一下,您添加gem后是否重新启动了您的应用程序?
    • 是的。更改后重新启动服务器。
    【解决方案2】:

    好的。我发现以下工作:

    valRet2 = [["'Sep 9, 1970'", 0],
      ["'Sep 14, 1970'", 0.94],
      ["'Sep 20, 1970'", 0.46]]
    

    所以问题部分解决了。仍在寻找返回 jQuery / javascript 可以理解的 json 对象的解决方案,例如:

    var returnedJson = <%= chart_data %>;
    

    【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2011-03-19
    • 2016-11-25
    • 2011-10-17
    • 2015-03-08
    • 2019-08-02
    • 1970-01-01
    • 2010-10-15
    • 2015-07-21
    相关资源
    最近更新 更多