2010-12-13 4 views
0

j'ai une action de création comme si dans un contrôleur de rails:rails Obtenir les erreurs de validation JSON en rappel jquery

def create 
    @user = User.new(params[:user]) 
    if @user.save 
    redirect_to @user 
    else 
    respond_to do |format| 
     format.json { render :json => @user.errors, :status => :unprocessable_entity } 
    end 
    end 
end 

Et en utilisant la méthode ajax jQuery J'ai un rappel d'erreur définie, mais ne peut pas comprendre comment obtenir maintien de la réponse JSON - ie @ user.errors Pour un callback réussi, vous obtenez un paramètre 'data', mais en cas d'erreur vous obtenez seulement (xhr, status, error). Comment puis-je obtenir ces json @ user.errors dans mon rappel d'erreur ajax?

Répondre

0

bonnes pratiques de débogage JavaScript: utiliser Firebug pour mettre un point d'arrêt dans votre rappel d'erreur et vérifier les arguments de la fonction, l'exploration jusqu'à ce que vous trouverez ce dont vous avez besoin. Si votre fonction accepte tous les 3 arguments, il va de soi que vous devriez trouver votre @user.errors dans l'un d'entre eux. Basé sur mon expérience, il est probablement dans xhr.responseText, comme mkoryak suggéré.

+0

Je pense que je l'ai trouvé dans status.responseText – Cameron

+0

C'est terriblement étrange. Selon la documentation jQuery: 'Les valeurs possibles pour le second argument (outre null) sont "timeout", "error", "notmodified" et "parsererror".' Donc, le statut devrait juste être une chaîne. Ce que vous cherchez * devrait * être quelque part dans l'objet xhr. Si c'est dans votre argument de statut, alors quelque chose de génial se passe. Je me demande si votre bloc format.json est en quelque sorte incorrect. – Samo

0

ici est ce que je l'ai fait

var onError = function(xhr, status) { 
     var error = (status != "timeout") ? xhr.responseText : ""; 
     //at this point eval error or json.parse it 
    }; 
Questions connexes