J'utilise Rails 3.2, j'ai un formulaire et je veux qu'il soit envoyé par ajax et que le contrôleur renvoie du json.
J'utilise une aide form_for comme suit :
= form_for(@object, :remote => true, :format => :json) do |f|
....
La méthode de création de mon contrôleur d'objets ressemble à ceci :
def create
respond_to do |format|
if @object.save
format.html { redirect_to @object }
format.json { render json: @object, status: :created, location: @object }
else
format.html { render action: "new" }
format.json { render json: @object.errors, status: :unprocessable_entity }
end
end
end
Le formulaire se soumet par ajax comme prévu. Mais le contrôleur renvoie du html, pas du json !
J'inspecte la demande avec firebug et je constate que l'en-tête Content-Type http de la demande ajax est défini comme application/html.
La documentation à ce sujet est plutôt rare, :format => :json semble juste ajouter ".json" à l'action du formulaire, sans modifier les en-têtes http.
J'ai également essayé :content_type => :json, sans résultat.
Je ne peux pas simplement coder en dur le contrôleur pour qu'il renvoie du json, car il y a d'autres endroits où je veux qu'il renvoie du html...
Quelqu'un sait-il comment dire au contrôleur de rendre le json lorsqu'il utilise form_for ?
Merci pour toute aide
0 votes
Quelle url et quelle méthode sont rendues dans votre balise de formulaire sur la page ?
0 votes
Post, la balise complète est : <form method="post" id="new_object" data-remote="true" class="new_object" action="/objects" accept-charset="UTF-8">
0 votes
Pas de json ici. Avez-vous envisagé d'utiliser request.xhr ? pour distinguer les requêtes ajax et normales au lieu du format demandé ?
0 votes
OK, j'ai fait un test rapide et cela semble être une solution de rechange, pour le moment. Je ne suis pas sûr que ce soit correct : le format et le mécanisme de requête doivent être séparés. Que se passe-t-il si je veux ajouter plus tard une autre requête ajax qui nécessite du xml ?