How do I PUT data to Rails using JQuery How do I PUT data to Rails using JQuery ajax ajax

How do I PUT data to Rails using JQuery


PUT and DELETE are not supported by all browsers, RubyOnRails supports passing an extra parameter with your data called _method which will indicate how RoR will treat the request.

$.ajax({          type: "POST",          url: '/admin/pages/1.json',          data: { _method:'PUT', page : {...} },          dataType: 'json',          success: function(msg) {            alert( "Data Saved: " + msg );          }});


The dataType param in jQuery isn't what you send, but rather specifies the format you expect the answer to be (yes, that's a very poor name). If you want to send your data to the server in a format other then application/x-www-form-urlencoded you should use contentType param. You also need to serialize your 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 );      }});


Ok, actually my JSON data didn't have the page key, my mistake. So thats why it was not correctly parsing. But now I get "[object Object]" string as the value for page key instead of a nicely parsed json object.

Where should I look: JQuery or Rails?

EDIT:

I've solved my issue stringifying the json object with a script found here: 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 );      }});

On the rails side json gem must be required. In the controller:

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