一个关于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个回答

[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]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问