2011-10-12 49 views
0

我有一个Ruby on Rails应用程序。点击一个按钮,我有一些应该返回JSON的AJAX调用。从红宝石辅助函数返回JSON到javascript

这里是代码中的相关行:

文件 “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] 

问候,

伊姆蒂亚兹

回答

0

使用:to_json为阵列

valRet1.to_json 

或从控制器的方法:

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

valRet1.to_json不起作用。 – imtiaz

+0

哦,加上'宝石“json''你'Gemfile'运行'束install' –

+0

仍然没有工作。我也尝试过ActiveSupport :: JSON.encode(valRet1)。另外,valRet1是一个散列。 – imtiaz

0

好的。我发现以下工作:

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

所以这个问题部分解决了。还在寻找一个解决方案,以返回一个JSON对象的jQuery/JavaScript可以通过调用了解,如:

var returnedJson = <%= chart_data %>; 
+0

那么,我的查询的正确答案是在这篇文章中:http://stackoverflow.com/questions/3757457/handling-json-in-js-erb-template-in-rails-3。 – imtiaz