2011-08-08 15 views
1

をSubmitingとき私は(た)「応答」ではない使用して自分のフォームを検証しsubmiting:

$(documend).ready(function(){ 
//setting variables 

ext_form.submit(function(){ 
    if(validateExt_email() & validateExt_pass()){ 

    var ext_email = $('#ext_email').attr('value'); 
    var ext_pass = $('#ext_pass').attr('value'); 

    $.ajax({ 
     type: "post", 
     url: "validation_ext.php", 
     data: "ext_email="+ ext_email +"& ext_pass="+ ext_pass, 
     success: function(){ 
     $('#content').load('p_order_ok.php'); 
     } 
    }) 
     return false; 
    }else 
    return false; 
}); 

//validation rules 
}); 

を私は私は私の電子メールの検証ルールを変更したときに、それは動作を停止だと思います

//validation rules 
//e-mail 
function validateExt_email(){ 
var ext_a = $("#ext_email").val(); 

var emailXHR = $.ajax({ 
        type: "post", 
        url: "check_email_ext.php", 
        data: "email="+ext_a, 
        success: function(rsp){ 
        //if it exists in our db 
        if(rsp == "exists"){ 
         //do something 
         return true; 
        } 
        else 
        //if it's valid but not in our db 
        if(rsp == "ok"){ 
         // do something else 
         return false; 
        } 
        else 
        //if it's NOT valid 
        if(rsp == "invalid"){ 
         //do something different 
         return false; 
        } 
        } 
       }).success = function() { 
} 
//continuing validation 
)}; 

"validation_ext.php"に投稿されたフォームの代わりに "check_email_ext.php"に(firebugのように)投稿しています。

ヘルプ/提案はありますか?

編集.... ありがとう私はこれをあきらめた...私はちょうど電子メールを検証するために、フィルタや正規表現を使用。

はあなたのコードが何をし言うものだすべての

答えて

0

ありがとうございました(簡単な方法)。

これは、フォームが送信されるたびに、こう述べています。

  1. 両方の機能がtrueを返す場合check_email_ext.php
  2. コールvalidateExt_pass
  3. に要求を行うコールvalidateExt_emailvalidation_ext.php
  4. 返すためにポスト偽

validateExt_emailは決して値を返さないので、あなたの条件は決して通過しません。私はvalidateExt_email()関数はブール値を返します(むしろundefined)しない場合、あなたは間違っていると思う

+0

ah ...はい...私は電子メールを入力するとき、またはsubmitを押すときに呼び出されますが、電子メールでも正しいです、それはvalidation_ext.phpに決して送信されません。私の電子メール評価のために外部ファイルに投稿していないときには、それはサブミットしていました。 – Pavlos1316

+0

'validateExt_email'関数は決して値を返しません。 AJAXリクエストを送出して終了します。AJAXリクエストのsuccessコールバック関数は、 'validateExt_email'がすでに返されてから長く呼ばれます。 true/falseを返すと、あなたが思うことはできません。論理を再考する必要があります。 –

+0

あなたは私の電子メールの検証の大部分が間違っていることを意味ですか? :) – Pavlos1316

2

$.ajax非同期リクエストオフ火災やJavaScriptの理由は、発射するsuccessコールバックを待ちません。つまり、この状態では意味:常にfalseと評価さ

if(validateExt_email() & validateExt_pass()) { // always false 

validateExt_email()ので(undefinedfalsyです)。

あなたがフォーム全体にのみ提出するようなソリューションは、AJAXの検証機能が戻ってきたら、すなわちsuccessは例えば、鍵となる起こるリファクタリングすることができます

ext_form.submit(function(){ 

    // your email ajax checker 
    var emailXHR = $.ajax({ 
         type: "post", 
         url: "check_email_ext.php", 
         ... 
        }).success = function() { 
         // do next validation step 
        }); 
+0

これを修正するにはどうすればよいですか?どこで定義すればいいですか? (私の3つの成功で...もしそれが真実か偽であるかを教えている) – Pavlos1316

+0

私のコードで編集したものは正しいですか? – Pavlos1316

+0

私の最後の行は少し異なります。.success = function(){} //次の検証を行います});大丈夫ですか???または私は何かを逃している? – Pavlos1316

-1

あなたは非同期に変更する必要があります:あなたの中に偽オプション。

また、スコープが機能しない可能性があります。関数(e)がtrueまたはfalseを返すことがわかります。これは無名関数です。あなたがしなければならないことは、提出ハンドラと同じスコープを持つ値を設定し、最後の行でそれを返します。