Rails: Passer Des Paramètres Par Le Biais De L'Ajax
J'ai besoin de passer des paramètres à l'aide de javascript sur le serveur. En ce moment, je passe en javascript comme ceci:
sendParams("<%= params[:q].to_json %>");
Puis l'envoyer en arrière comme ceci:
function sendParams(q){
$.ajax({
url: '/mymodel/myaction',
type: 'post',
data: {'q':q},
contentType: 'json'
});
}
Dans mon contrôleur, j'essaie de les utiliser comme je le ferais de toute autre params:
MyModel.where(params[:q])
Mais les paramètres sont de retour à vide, même si firebug montre cela dans le POST onglet:
q=%7B%26quot%3Bc%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Ba%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bname%26quot%3B%3A%26quot%3Btitle%26quot%3B%7D%7D%2C%26quot%3Bp%26quot%3B%3A%26quot%3Bcont%26quot%3B%2C%26quot%3Bv%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bvalue%26quot%3B%3A%26quot%3B2%26quot%3B%7D%7D%7D%7D%2C%26quot%3Bs%26quot%3B%3A%7B%26quot%3B0%26quot%3B%3A%7B%26quot%3Bname%26quot%3B%3A%26quot%3Bvotes_popularity%26quot%3B%2C%26quot%3Bdir%26quot%3B%3A%26quot%3Bdesc%26quot%3B%7D%7D%7D
Aucune idée pourquoi cette information n'est pas traitée par la clause where? Que puis-je faire pour faire de la params Rails de nouveau lisibles?
Mise à JOUR:
Started POST "/publications/search?scroll=active&page=6" for 127.0.0.1 at 2013-0
2-12 22:55:24 -0600
Processing by PublicationsController#index as */*
Parameters: {"scroll"=>"active", "page"=>"6"}
Mise à JOUR 2:
Le problème est apparemment issu de contentType
. Lorsque je le supprime, puis q
est envoyé sous forme de Rails de paramètre. Malheureusement, q
est toujours en JSON, ce qui entraîne l'erreur:
undefined method `with_indifferent_access' for #<String:0x686d0a8>
Comment puis-je convertir JSON pour un params de hachage?
Bonne prise. "q" n'apparaissent pas dans les paramètres. Je suis en supposant qu'elle devrait, même si c'est dans le post de données?
OriginalL'auteur nullnullnull | 2013-02-13
Vous devez vous connecter pour publier un commentaire.
Vos données paramètre est incorrect.
Vous avez
Il devrait être
OriginalL'auteur Mark Stratmann
Il y avait un couple de questions qui doivent être résolus pour que cela fonctionne. Tout d'abord,
q
n'a pas été envoyé en tant que paramètre de Rails, même si elle a été poster. La raison était parce que c'était d'être traités comme des données JSON plutôt que comme un paramètre. J'ai résolu ce problème en supprimant la ligne:Après cela, l'AJAX correctement envoyé "q", mais des Rails avait du mal à l'utiliser comme il l'était en JSON. J'ai eu à analyser avec
ActiveSupport::JSON.decode
, mais c'était de jeter un737: unexpected token
erreur. J'ai couru le code par l' (JSONlint)[http://jsonlint.com/], et il s'avère que tous les guillemets a été échappé.À partir de là, il y avait deux solutions. La plus évidente est d'utiliser
.html_safe
comme suit:Mais cela a causé des problèmes lorsque l'utilisateur insérés les guillemets. L'alternative plus sûre était de décoder les échappés entités HTML après qu'ils ont été transmis à des Rails comme suit:
Et cela a fait le tour.
OriginalL'auteur nullnullnull