我正在尝试发送一个如下所示的jQuery Ajax PUT请求:
$.ajax({ type: "PUT",url: '/admin/pages/1.json',data: { page : {...} },dataType: 'json',success: function(msg) { alert( "Data Saved: " + msg ); } });
我的控制器大致如下:
respond_to do |format| if @page.update_attributes params[:page] format.html{ ... } format.json{ render :json => {:saved => 'ok'}.to_json } else format.html{ ... } format.json{ render :json => {:saved => 'fail'}.to_json } end end
但是我收到以下错误.
评估nil.name时发生错误
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:29:in merge_element!’
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:inparse”
(DELEGATION):2:在__send__’
(__DELEGATION __):2:inparse”
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in`from_xml’
…
…
就像Ruby on Rails正在尝试将参数解析为XML,但是我想使用JSON!
将JSON放在Ruby on Rails上我该怎么办?
解决方法
设置contentType不适用于我.我得到一个字符串,而不是params [:page]的哈希.
所以我这样解决了:
使用JavaScript中的JSON脚本在JavaScript中对JSON对象进行字符串化:
$.ajax({ type: "PUT",data: { page : JSON.strigify( {...} ) },success: function(msg) { alert( "Data Saved: " + msg ); } });
在Ruby on Rails方面,必须需要一个JSON gem.在控制器中:
params[:page] = JSON.parse params[:page] if params[:page].is_a? String
它不是很漂亮,但它对我有用.