Comment faire échouer la requête Ajax dans Rails?
Lorsque l'utilisateur clique sur un élément spécifique, j'utilise jQuery méthode post de mettre à jour quelque chose dans la base de données:
$.post("/posts/" + post_id + "/update_something",
{ some_param: some_value },
success_handler);
où update_something
ressemble à ceci:
def update_something
post = Post.find(params[:id])
post.update_attributes(:some_field => params[:some_param])
render :nothing => true
end
Le problème est que si update_attributes
échoue, la demande réussit encore et success_handler
est exécutée.
Comment ai-je pu causer l'échec de la demande lorsque update_attributes
ne telles que success_handler
ne sera pas exécutée?
source d'informationauteur Misha Moroshko
Vous devez vous connecter pour publier un commentaire.
Vous pouvez soit le faire
render :status => 400
(ou un autre code d'erreur) dans les Rails, ce qui va déclencher l'error
rappel de$.ajax()
ou vous pouvez rendre certains de JSON avec un message d'erreur:render :json => { :success => false }
Puis dans votre
success_handler
fonction:Edit:
Oh, et
update_attributes
retourne false lorsqu'il échoue. Ainsi, vous pouvez rendre votre réponse sur cette base.Edit 2 ans plus tard:
Après une couple d'années, et de voir que cela a un peu de upvotes, je recommande fortement d'utiliser le
status: 400
plutôt la méthode de rendu200
. C'est ce que leerror
gestionnaire de requêtes AJAX sont pour, et devrait être utilisé de cette façon.Bien, vous devez ajouter un gestionnaire d'erreur, et de lui donner une erreur à manipuler. Donc, dans votre JavaScript:
Et dans les Rails:
Remarque:
500
peut ou peut ne pas être le code d'erreur approprié ici—choisir parmi les 400 et 500 est approprié.