2011-09-14 24 views
1

は、私の質問は、私が使用しています複数のプロセスベースのコードよりも基づいていますが、(いくつかの矛盾時につまずくかもしれないと)共有する:jQueryの、カスタムの検証、およびAJAX

  • のjQuery 1.6.2を
  • jQueryの検証1.8.1
だからここ

行く...

カスタム検証に追加する(使用はaddMethod)(代わりに内蔵のリモートコールの)サーバーへのコールを必要とし、あなたがしなければなりません と同時にに応答するように設定すると、結果がサーバーから返される前にメソッドが終了するためです。これは正しいです?

これを行う主な2つの方法は、async falseまたはdeferred.promise()で$ .ajaxリクエストを呼び出すことです。これは正しいです?

私はgetJSONを使用してカスタム検証に関連する質問をする多くの記事を探していますが、回答は通常「あなたは何も戻っていません」と回答していますが、遅い?

ありがとうございました!

答えて

2

あなたの前提は正しいです。 jQueryの検証ではこれが非同期要求であることを知る必要があるため、カスタムメソッドでは非同期要求を使用することはできません。カスタムメソッドこの状況でremoteルールを使用してはならない理由です:

$("#myform").validate({ 
    rules: { 
     email: { 
      required: true, 
      email: true, 
      remote: { 
       url: "check-email.php", 
       type: "post", 
       data: { 
        username: function() { 
         return $("#username").val(); 
        } 
       } 
      } 
     } 
    } 
}); 

同期AJAX要求(またはSJAX)私はやってあなたを推薦するものではないです。

+0

ありがとうDarin - 私はRailsで、ルートとコントローラーをできるだけDRY状態に保つために、単純な検証チェックに対処する新しいアクションを作成したくありません。私はGETを使用していて、配列を返すために検索メソッドで解析されるいくつかのパラメータを渡し、応答が空であるかどうかをチェックします。私はこのタイプの複雑さで、私はリモートの代わりにカスタムメソッドを使用しなければならないと思います。 – sshefer

+0

@sshefer、Railsについてはわかりませんが、検証チェックを実行するためにはなぜ別のアクションを作成する必要がありますか?あなたは同じ行動を再利用できませんか?検証が合格したか失敗したかによって、アクションはtrueまたはfalseを返す必要があります。それで、必要なすべてのパラメータを入力として受け取り、ブール値を返すアクションを定義します。 –

+0

thats素晴らしいアイデア、私の唯一の問題/問題は、私は明示的に渡すことができるようにリモートメソッドをオーバーライドできますか?私は、あなたが定義したデータだけでなく、呼び出しのフィールド名と値もデフォルトで知っています。 paramsを自分で設定することができれば理想的です。 – sshefer

関連する問題