4

私が欲しいもの

新しい Rails Respond_to Controller Api を ajax フォームで使用します。オブジェクトがレールを検証しない場合、Json エラー オブジェクトが返され、「ajax:error」イベントがトリガーされます。各エラーを対応するフォーム フィールドの横/下に表示したい (フォーマットを使用しています)。

ここで私の例..

コントローラ:

class Admin::PrivateMessagesController < AdminController
  respond_to :json

  def create
    private_message = PrivateMessage.new(params[:private_message])
    private_message.save
    respond_with private_message
  end
end

見る

<%= form_for @private_message, :remote => true, :html => {"data-type" => "json"}  do |f|
  f.input :body
 ... 
  end %>

js/コーヒースクリプト

すべてのエラーを文字列に追加して表示するだけです..

$("#new_private_message").on 'ajax:error', (event, data, status) ->
  error = "Errors: "
  $.each $.parseJSON(data.responseText), (field, errorMessage) ->
    error += "#{field}-#{errorMessage} "
  $('#errors').html(error)

json エラー オブジェクト

{"body":["Please enter a message."],"subject":["Please enter a message."]}

私の質問!

  • 自分でjsonを解析する必要がありますか?
  • フィールドにエラー メッセージを追加するにはどうすればよいですか?
  • 標準のjquery-ujsの一部ではないでしょうか?
4

1 に答える 1

2

do i have to parse the json myself?

はい、エラー応答は jQuery Ajax API によって自動的に解析されません。これは自分で行う必要があります。

how can i add the error message to the field?

エラーを処理する方法の非常に簡単な例を次に示します: http://jsfiddle.net/hpM6W/

ただし、はるかに包括的なソリューションが必要です。たとえば、私が提供したサンプルでは、​​2 回送信して何が起こるかを確認します...

リッチ クライアント側の検証とエラー メッセージの表示のための多くのツールキットとライブラリがあります。フォームの検証を開始するには、 jQuery Validation Pluginを参照することを強くお勧めします。常にサーバー側の検証を行い、エラーを返す必要があります。

私が過去に行ったことは、ユーザーの利便性 (ユーザー エクスペリエンスの向上) としてクライアント側の検証を行い、jQuery Validation Plugin を使用して、showErrorsを介してサーバー側の検証の結果をレンダリングするハイブリッド モデルです。方法。

ここに簡単な例があります: http://jsfiddle.net/GNq84/は、showErrors を使用してサーバー側の検証からの結果のエラー メッセージを表示する方法について説明しています。この例では、複数回送信する方がはるかにうまく機能することに注意してください。

ただし、1 つの警告があり{ "element": "message" }ます{ "element": [ "message1", "message2" ] }

于 2012-04-12T12:36:31.487 に答える