2016-06-15 15 views
0

私は登録フォームを送信するためにajaxを使用しています。この422(Unprocessable Entity)エラーについて心配する必要がありますか? (Rails&Devise)

enter image description here

詳細が正しい時に正しく送信されたフォーム。詳細が間違っていれば、エラーを正しく捕捉することもできます。しかし、詳細が間違っている場合、私はまた私のコンソールログにPOST http://localhost:3000/users 422 (Unprocessable Entity)エラーメッセージを見ることができる:

enter image description here

私の質問は、私はこのエラーを心配する必要があります、ありますか?これは正常ですか? これが正常でない場合、正しく処理するにはどうすればよいですか?

ありがとうございます!

################################ UPDATE ############端末から##################

エラーメッセージ:

Started POST "/users" for ::1 at 2016-06-15 09:20:20 +0100 
Processing by RegistrationsController#create as JSON 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"0D1qSK8IfbuefQ0bwEdKQFD+6WZ8XJtCnl2FZ6Nln9khLtv6qYCmoTKhwBFkVIJdYXSRQJ4e+9QAAdJ5UJzukQ==", "user"=>{"first_name"=>"John", "last_name"=>"Doe", "email"=>"[email protected]", "password"=>"[FILTERED]"}, "commit"=>"Sign up"} 
    (0.2ms) BEGIN 
    User Exists (0.6ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY '[email protected]' LIMIT 1 
    (0.2ms) ROLLBACK 
Completed 422 Unprocessable Entity in 93ms (Views: 0.4ms | ActiveRecord: 1.1ms) 

登録コントローラ:

class RegistrationsController < Devise::RegistrationsController 
    respond_to :json 

    def create 
    super 
    end 
end 

のapplication.js:

$(function(){ 

    $("form#ajax_signup").submit(function(e){ 
    e.preventDefault(); 
    var user_info = $(this).serializeObject(); 
    console.log("About to post to /users: " + JSON.stringify(user_info)); 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost:3000/users", 
     data: user_info, 
     success: function(json){ 
     console.log("The Devise Response: " + JSON.stringify(json)); 
     }, 
     error: function(xhr) { 

      var errors = jQuery.parseJSON(xhr.responseText).errors; 

      for (messages in errors) { 
       error_messages = messages + ' ' + errors[messages]; 

       console.log(error_messages); 
      } 

     }, 
     dataType: "json" 
    }); 
    }); 

}); 
+1

あなたは内の関連するログエントリの残りの部分、および(使用中の強いのparams方法を含む)責任コントローラメソッドを置いてもらえません。 – Matt

+0

もちろん、このPOSTアクションが何らかの理由で失敗した場合(「電子メールアドレスの取得」)、いくつかの4xx応答が返されることに注意してください。あなたは何を期待していますか?クライアント側の検証をしたいだけですか?それでも、サーバーによって送信されたエラー応答を処理する必要があります。 – matthias

+0

@Matt質問に関するいくつかの詳細を投稿しました –

答えて

0

いいえ、あなたのコンソールでは約422心配しないでは、この赤い警告は、あなたのjavascriptのコードを壊すことはありません。 しかし、このエラーは次のように、あなたのjavascriptのコードで簡単に検証処理を提供することができます

$('#form').on('ajax:error', 
    function() { return 'handle me'; } 
); 
+0

ああ、そうです。 Airbnb(AJAXを使用して登録フォームを処理すると信じています)のようなサイトをチェックすると、フォームが失敗したときに422のエラーはありません。彼らは私のような同じエラーを表示すると思いますか?または、この問題を正しく処理する方法があります。 –

+0

検証には2つのアプローチがあります。最初は422と2番目:200(ok)+ 'エラー:{name: 'は空白にする}}です。最初の方法でステータスコードをチェックすることができます.2番目のコードでは、 'error'キーの存在を確認する必要があります。 – itsnikolay

+0

@itsnikolayこれは本当であり、おそらくいくつかの大きなサービスがこれを処理します例えば、利用可能性をチェックし、クライアント側の「予測的」検証を行う)。しかしそれにもかかわらず、クライアント側がエンティティが正常に作成または更新できる方法で処理できないデータを送信した場合(POST、PUT、PATCH ...)、4xx(クライアント側エラー)コードを返すより多くのRESTスタイルです。 )。 – matthias

関連する問題