从ruby helper函数返回JSON到javascript

时间:2011-10-12 11:07:54

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

我有一个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]

此致

伊姆蒂亚兹

2 个答案:

答案 0 :(得分:0)

对数组

使用:to_json方法
valRet1.to_json

或来自控制器:

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

答案 1 :(得分:0)

确定。我发现以下工作:

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

因此问题得到了部分解决。仍在寻找一个解决方案来返回一个jQuery / javascript可以通过调用来理解的json对象:

var returnedJson = <%= chart_data %>;