如何使用JQuery将数据放入Rails

我想发送一个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试图parsingXML的参数,但我想使用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 ); } }); 

在jQuery中的dataType参数不是你发送的,而是指定你期望答案的格式(是的,这是一个很差的名字)。 如果你想发送你的数据到服务器以application/x-www-form-urlencoded你应该使用contentType参数。 您还需要序列化您的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数据没有页键,我的错误。 所以这就是为什么它不正确的parsing。 但现在我得到“[对象对象]”string作为页面键的值,而不是一个很好parsing的JSON对象。

我应该看看:JQuery还是Rails?

编辑:

我已经解决了我的问题,用这里find的脚本对json对象进行string化: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 ); } }); 

在轨道边jsongem必须被要求。 在控制器中:

  params[:page] = JSON.parse params[:page] if params[:page].is_a? String 

我有一个类似的问题[对象对象]与jQuery /钢轨,但与HTML,而不是JSON。 也许这将有助于 –

[object Object]

 data: { lesson: { date: drop_date } } 

lesson[date]参数lesson[date]

 data: { "lesson[date]": drop_date } 

希望这可以帮助 –

 var id = $('#route_id').val() $.ajax({ type: 'PUT', url: '/routes/'+ id, data: $('#markerform').serializeArray(), dataType: "JSON", success: function(data) { console.log(data); } }); 

你可能只需要在jQuery上设置请求头。

 jQuery.ajaxSetup({ 'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript"); } })