hexawing 2009-11-02 16:52
浏览 317
已采纳

一个关于JSON传递数据的问题

(可能涉及的方面比较多,不知道是不是应该放这个区)
最近在学YUI,里面的dataSource和dataTable,看他的[url=http://developer.yahoo.com/yui/examples/datatable/dt_dynamicdata.html]演示[/url]很爽的样子,于是就想把它和ROR结合起来,但在尝试服务器端分页的时候出了问题,说data error。
现在困惑我的是,以下几点我都不是很懂:
1.ROR生成的JSON格式是不是“对的”?
因为看到了很多种生成JSON的方法,有直接to_json的,还有gem install json之后再parse的,甚至还有一个修正“ruby生成的JSON不带引号”问题的方法[code="ruby"]ActiveSupport::JSON.unquote_hash_key_identifiers = false[/code]
Google的时候还看到有的说是render :text => "xxx",有的说是render :json => "xxx",也不知道到底听谁的……
还有这样的:
[code="ruby"]irb(main):001:0> Product.find(:all).to_json
=> "[\"#Product:0x4711cf0\",\"#Product:0x4711cc8\",\"#Product:0x4711ca0\",\"#Product:0x4711c78\",\"#Product:0x4711c50\",\"#Product:0x4711c28\",\"#Product:0x4711c00\",\"#Product:0x4711bd8\"]"[/code]
所以,问题一是:[color=darkred][b]怎么才能用ROR生成出标准的JSON格式来啊?[/b][/color]
2.JS里调用,YUI用的是PHP版:
[code="javascript"] var myDataSource = new YAHOO.util.DataSource("assets/php/json_proxy.php?");

[/code]
我试图调用它来当试验数据,但不行,貌似是它只能站内引用;
我又试图下载这个文件来研究,但下载下来只是一个文本形式的东东,感觉下载下来的已经是输出结果了。
也有人写过JAVA版的,但问题同上……
我也找到过ROR版的调用,说是这样:
[code="javascript"] var myDataSource = new YAHOO.util.DataSource("http://localhost:3000/product/list/index.json?");

[/code]
同时在Controller里写:
[code="ruby"]
@products = Product.find(:all)
respond_to do |format|
format.html
format.xml { render :xml => @products }
format.json { render :text => @products }
end
[/code]
但由于不知道:text对还是:json对,并且无论我用哪种,生成出来的都会有奇怪的属性而导致跟YUI的例子生成的结果格式不一样……
所以,问题二是:[color=red][b]在YUI(或者说Javascript)那边,应该怎么调用“用ROR生成好的JSON数据”呢?[/b][/color]

(其实在YUI里面还有问题,不过如果先把这两点最大的疑惑弄清楚,剩下的就可以自行研究了……)

  • 写回答

1条回答 默认 最新

  • Hooopo 2009-11-03 15:24
    关注

    [quote]1.ROR生成的JSON格式是不是“对的”? [/quote]
    rails里用 @user = User.find(1).to_json生成的json会多加一个user前缀,是这个样子的:[code="java"]>> @user = User.find(98).to_json

    => "{\"user\":{\"updated_at...[/code]
    这个格式没有错,但是可能和YUI要求的格式不一样。
    [quote]Google的时候还看到有的说是render :text => "xxx",有的说是render :json => "xxx",也不知道到底听谁的[/quote]
    两种写法都是正确的:
    [code="java"]render :text => @user.to_json[/code]

    [code="java"]render :json => @user[/code]
    [quote]irb(main):001:0> Product.find(:all).to_json
    => "[\"#Product:0x4711cf0\",\"#Product:0x4711cc8\",\"#Product:0x4711ca0\",\"#Product:0x4711c78\",\"#Product:0x4711c50\",\"#Product:0x4711c28\",\"#Product:0x4711c00\",\"#Product:0x4711bd8\"]"[/quote]
    这个生成的结果是错的。

    [quote]怎么才能用ROR生成出标准的JSON格式来啊?[/quote]
    rails自带的to_json生产的json从格式上来说就是标准的。尽管前面多了一个model名。

    综上:你得知道你想要的json的具体形式是什么样子的。
    PS:可以试试这种方式:
    [code="ruby"]
    @users = User.all
    render :text => @users.map{|user| user.attributes}.to_json
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题