Comment puis-je mettre des données JSON sur Ruby on Rails en utilisant jQuery?
J'essaie d'envoyer un jQuery Ajax demande qui ressemble à ceci:
$.ajax({
type: "PUT",
url: '/admin/pages/1.json',
data: { page : {...} },
dataType: 'json',
success: function(msg) {
alert( "Data Saved: " + msg );
}
});
Mon contrôleur ressemble à peu près comme ceci:
respond_to do |format|
if @page.update_attributes params[:page]
format.html{ ... }
format.json{ render :json => {:saved => 'ok'}.to_json }
else
format.html{ ... }
format.json{ render :json => {:saved => 'fail'}.to_json }
end
end
mais j'obtiens l'erreur suivante.
L'erreur s'est produite lors de l'évaluation de néant.nom
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:29:dans merge_element!'
parse'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in
(DÉLÉGATION):2:dans __send__'
parse'
(__DELEGATION__):2:in
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:en `from_xml'
...
...
C'est comme Ruby on Rails est d'essayer d'analyser les paramètres au format XML, mais je veux l'utiliser JSON!
Que dois-je faire pour mettre JSON pour Ruby on Rails?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Réglage de la contentType ne fonctionne pas pour moi. J'ai été faire une chaîne au lieu d'une table de hachage pour params[:p].
Donc je l'ai résolu comme ceci:
Stringifying l'objet JSON avec un script trouvé à JSON JavaScript:
Sur le framework Ruby on Rails côté, un JSON bijou doit être requis. Dans le contrôleur:
Elle n'est pas jolie du tout, mais ça a fonctionné pour moi.
Vous devez définir le contentType dans vos options. contentType est ce que vous envoyez. type de données est ce que vous attendez en retour. Vous devez lire attentivement les la documentation sur les options argument à l'ajax.
Si vous ne voulez pas ajouter des scripts, vous pourriez faire
Aussi, de la tête, mais il y a un bug dans Ruby on Rails 2.3.2 qui empêche ce travail. Voir Ruby on Rails 2.3 JSON "mettre" demande de routage est cassé
Vous devez définir
contentType
à"application/json"
dans vos options;dataType
est seulement ce que vous attendez en retour.Aussi, vous avez besoin de sérialiser vos
data
champ à l'aide deJSON.stringify
: