I am trying to send a jquery ajax PUT request that looks like this:
$.ajax({
type: \"PUT\",
url: \'/admin/pages/1.json\',
data:
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 );
}
});
You probably just need to set the Request Headers on jQuery.
jQuery.ajaxSetup({
'beforeSend': function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
}
})
var id = $('#route_id').val()
$.ajax({
type: 'PUT',
url: '/routes/'+ id,
data: $('#markerform').serializeArray(),
dataType: "JSON",
success: function(data) {
console.log(data);
}
});
I had a similar problem [object Object] with jQuery/rails, but with HTML, rather than JSON. Perhaps this will help -
param of [object Object]
data: { lesson: { date: drop_date } }
param of lesson[date]
data: { "lesson[date]": drop_date }
hope this helps -
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