我试图发送一个看起来像这样的jquery ajax PUT请求:
$.ajax({ type: "PUT", url: '/admin/pages/1.json', data: { page : {...} }, dataType: 'json', success: function(msg) { alert( "Data Saved: " + msg ); } });
但是我收到以下错误:
The error occurred while evaluating 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:in `parse' (__DELEGATION__):2:in `__send__' (__DELEGATION__):2:in `parse' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in `from_xml' ... ...
就像Rails试图将params解析为XML,但我想使用JSON !!
如何将JSON放入rails?
所有浏览器都不支持PUT和DELETE,RubyOnRails支持使用名为_method的数据传递额外参数,这将指示RoR如何处理请求.
$.ajax({ type: "POST", url: '/admin/pages/1.json', data: { _method:'PUT', page : {...} }, dataType: 'json', success: function(msg) { alert( "Data Saved: " + msg ); } });
dataType
jQuery中的参数不是你发送的,而是指定你期望答案的格式(是的,这是一个非常糟糕的名字).如果要以其他格式将数据发送到服务器,application/x-www-form-urlencoded
则应使用contentType
param.您还需要序列化您的data
:
$.ajax({ type: "PUT", url: '/admin/pages/1.json', data: JSON.stringify({...}), contentType: 'application/json', // format of request payload dataType: 'json', // format of the response success: function(msg) { alert( "Data Saved: " + msg ); } });
好吧,实际上我的JSON数据没有页面键,我的错误.这就是为什么它没有正确解析.但现在我得到"[object Object]"字符串作为页面键的值而不是一个很好解析的json对象.
我应该在哪里看:JQuery还是Rails?
编辑:
我已经解决了我的问题,用这里的脚本字符串化json对象:www.json.org/js.html:
$.ajax({ type: "PUT", url: '/admin/pages/1.json', data: { page : JSON.stringify( {...} ) }, dataType: 'json', success: function(msg) { alert( "Data Saved: " + msg ); } });
在轨道上,必须要求json gem.在控制器中:
params[:page] = JSON.parse params[:page] if params[:page].is_a? String