Come inserire i dati in Rails utilizzando JQuery

Sto cercando di inviare una richiesta PJj ajax jquery simile a questa:

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

ma ottengo il seguente errore:

 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' ... ... 

È come se Rails stia cercando di analizzare i parametri come XML, ma voglio usare JSON !!

Cosa devo fare per mettere JSON su rotaie?

PUT e DELETE non sono supportati da tutti i browser, RubyOnRails supporta il passaggio di un parametro aggiuntivo con i dati chiamati _method che indica come RoR tratterà la richiesta.

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

Il parametro dataType in jQuery non è quello che si invia, ma piuttosto specifica il formato che si aspetta che la risposta sia (sì, questo è un nome molto povero). Se vuoi inviare i tuoi dati al server in un formato diverso da application/x-www-form-urlencoded , dovresti usare contentType param. È inoltre necessario serializzare i 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, in realtà i miei dati JSON non avevano la chiave della pagina, il mio errore. Ecco perché non stava analizzando correttamente. Ma ora ottengo la stringa “[object Object]” come valore per la chiave di pagina invece di un object json piacevolmente analizzato.

Dove devo guardare: JQuery o Rails?

MODIFICARE:

Ho risolto il mio problema stringificando l’object JSON con uno script trovato qui: http://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 ); } }); 

Sul lato delle rotaie deve essere richiesta la gem json. Nel controller:

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

Ho avuto un problema simile [object object] con jQuery / rails, ma con HTML, piuttosto che JSON. Forse questo aiuterà –

param di [object Object]

 data: { lesson: { date: drop_date } } 

param of lesson[date]

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

spero che questo ti aiuti –

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

Probabilmente hai solo bisogno di impostare le intestazioni di richiesta su jQuery.

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