2011-06-22 9 views
1

jQueryのバリデータープラグインを使用していくつかの検証に苦労しています。jQueryバリデーターaddMethod、エラーメッセージを表示する内容に関係なく

基本的には、ユーザー名が既に存在する場合、私はチェックしてるので、私は自分自身のメソッドを作成するためにaddMethodを使用。私はAJAXを介して、データベースに問い合わせを行い、ユーザ名が存在するかどうかを知らせる応答を生成するコントローラ(MVCパターンのようなコントローラ)にリクエストを送信します。

$.validator.addMethod("username_available", function(value, element) { 
    $.ajax({ 
     url: MyPostURL, 
     type: "POST", 
     dataType: "html", 
     data: ({username: jQuery.trim($("#username").val()), 
       }), 
     success: function(data) { 
      if (data == "True") 
       return true; // Available 
      else 
       return false; // Already exists, not available 
     } 
    }) 
}, "Username not available."); 

、フィールドが使用可能であるエラーメッセージ「ユーザー名は使用できません」であればどんなに表示し続ける:ここでは、コードです。

MyPostURLからの応答がO.K.です私はいくつかの警告()を配置するデバッグを行い、結果は理にかなった。コントローラーが戻ってくる代わりにエコーしていることを確認しました。

私の知る限り、この方法のロジックはO.K.ようですので、私は何かが欠けている必要があります。

誰もがこの上でいくつかの光を当てることができますか?

T.I.A.

答えて

3

あなた$.ajax呼び出しは非同期ですので、あなたのバリデータを返しますAJAX呼び出しが完了する前に、あなたの成功ハンドラ内のreturnステートメントは、あなたのバリデータから値を返さず、成功ハンドラからの値だけを返し、成功ハンドラが返すものは誰も気にしません。バリデータコールバック関数は値をまったく返さず、値の欠如はバリデータエンジンによって「偽」と解釈されます。

あなたは$.ajax同期させることができます:

$.validator.addMethod("username_available", function(value, element) { 
    var is_valid = false; 
    $.ajax({ 
     // as before... 
     async: false, 
     success: function(data) { 
      is_valid = data == 'True'; 
     } 
    }); 
    return is_valid; 
}, "Username not available."); 

をしかし$.ajax呼び出しが完了するまで、それはブラウザをロックします。それはおそらく、単純な "username is available"の検証には大丈夫でしょう。

+0

チャームのように働いた!私のバリデーターは何も返さなかった!あなたの答えと全体の説明のためのタンクは、それを感謝します。 – romeroqj

関連する問題