2012-05-07 11 views
-1

これは私の問題です。私は、フォームを検証し、フォームの送信を許可する前にユーザー名が利用可能であることを確認しようとしています。ユーザ名をチェックする私のPHPスクリプトを含め、すべての私の関数が適切に動作します。しかし、私は提出時に提出するフォームを停止することはできません。私が得たのは、私が定義したAJAX .error(メッセージ)です。 Firebugのレポートフォームが送信された場合、なぜ私のajax関数を処理できないのですか?

throw Components.Exception("prompt aborted by user", Cr.NS_ERROR_NOT_AVAILABLE); 

しかし、私がe.preventDefault()を呼び出すと、 username_exists関数の外では、それはフォームの送信を停止し、上記の関数の中で私のチェックを行うことができます。私は完全に困惑しており、あなたが助けてくれることを願っています。ありがとう。

PS。私も、その関数内)(check_username_onsubmit()

$(function(){ 
    check_username_onsubmit(); 
}); 


function check_username_onsubmit(){ 
    $this = $('#username.registerForm'); 
    $('form.registerForm').submit(function(e){ 
     username_exists($this, function(data){ 
      if(data.found == 1){ 
       e.preventDefault(); 
       alert('Username Taken'); 
      }else{ 
       alert('Username Free'); 
      } 
     }); 
     // e.preventDefault(); 
    }); 
} 


function username_exists($this, callback){ 
    var username = $this.val(); 

    $.ajax({ 
     url : '../includes/Single Scripts/username_exist.php', 
     data : { 
      username : username 
     }, 
     type : 'POST', 
     dataType : 'json', 
     success : function(data){ 
      callback(data); 
     } 
    }).error(function(){ 
      alert('An error has occured'); 
    }); 
} 
+0

あなたは '$ this'をグローバル変数にしています。他の場所で更新されている可能性がありますか? –

+0

@Rocket私は内部の機能を除いてどこでも使用していません。 – yehuda

+2

なぜdownvote?説明してください! – yehuda

答えて

0

を簡単な警告を行うことは提出からフォームを停止しますreturn false;に投げることができません。

既に知っていれば、javascriptメソッドを送信イベントに正しく添付したことを確認するか、クリックイベントを送信してください。関数はおそらく呼び出されていません。

+0

それは 'e.preventDefault();'がすることです。 –

+0

私はフォームを送信するのを止める方法を知っていますが、私の内部の機能の中で簡単な警告()をすることさえできません。 – yehuda

+0

私はクリックで送信をブロックすることができると説明したので、正しく添付されています。ちょうどAjax関数が動作していません – yehuda

2

私は<input type="submit">を削除し、を追加すると、</form>の後に追加します。

その後、のようなものです:

$('#send').on('click', function() { 
    var uname = $('#username.registerForm').val(); 
    username_exists(uname, function (data) { 
     if (data.found == 1) { 
      alert('Username Taken'); 
     } else { 
      alert('Username Free'); 
      $('form.registerForm').submit(); 
     } 
    }); 
}); 

EDIT:また

function username_exists(username, callback) { 
    $.ajax({ 
     url: '../includes/Single%20Scripts/username_exist.php', 
     data: { 
      'username': username 
     }, 
     type: 'POST', 
     dataType: 'json', 
     success: function (data) { 
      callback(data); 
     } 
    }).error(function() { 
     alert('An error has occured'); 
    }); 
} 
+0

これは悪い解決策ではありませんが、ハックです。なぜ私のAJAXが動作していないのか答えてほしい – yehuda

+0

@yehuda私の編集を参照してください – honyovk

+0

何が助けになりましたか? – yehuda

2

は、その非常にデザインがページを離れることで、提出してください。 AJAX、その非常にデザインによって、ページを残しません。

フォームを検証してサーバーに送信する場合は、送信ボタンを削除します。クリック時にクライアント側の検証スクリプトを起動し、成功すればAJAX呼び出しを行います。

$('#someForm').on('click','#myButton', {}, aValidationFunctionToCall); 

aValidationFunctionToCall : function (event) { 
    // validate stuff 
    // show the user the error of their ways 
    // or call your ajax 
} 
+0

今すぐそれを見て喝采 – yehuda

関連する問題