2011-08-09 10 views
0

私はサブミットを防ぐことができるフラグを設定するajax呼び出しを持っています。 問題は、if(flag==1)return trueステートメントにブレークポイントを設定してコードをステップ実行すると、フラグ= 1にリダイレクトされますが、それが決してredierctsされません。 何が起こっていますか?Firefoxのブレークポイントの変更submit

$("#login").submit(function(e) { 

var flag = 2; 
var un = $('#username').val();  
    $.ajax(
    {    
     type: "POST", 
     url: "Utilities/CheckUsername.php", 
     data: "un="+ un, 
     success: function(data) 
     { 

      if(data=="Username Does Not Exist") 
      {   

       flag=1;      
      } 
      else 
      { 
       $('#mike').html(data); 
       flag=2; 
      }     
     } 

    }); 
    if(flag==1) 
     { 
      return true; 
     } 
     else 
     { 
      e.preventDefault(); 
     } 
    return false; 
    }); 

    }); 

編集:これはまだ動作しません。ユーザー名が存在しないかどうかを明確にするために、登録ページに移動します。ユーザー名が取得されたことを通知せず、別のユーザーに試してみましょう。

<script type="text/javascript">$(document).ready(function(){ 
$("#submitButton").click(function(e) { 
     var un = $('#username').val();  
      $.ajax(
      {    
       type: "POST", 
       url: "Utilities/CheckUsername.php", 
       data: "un="+ un, 
       success: function(data) 
       { 

        if(data=="Username Does Not Exist") 
        {   
         $('#login').submit();     
        } 
        else 
        { 
         $('#mike').html(data); 


        }     
       } 

      }); 
      }); 

      }); 
      </script> 
</head> 
<body> 
     <form name="login" id="login" method="post" action="dsds.html"> 
     UserName<input type="text" name="username" id="username"value=""> 
     <br/> 
     Password<input type="text" name="password" id="password" value=""> 
     <br/> 
     Password Again<input type="text" name="passwordagain" id="passwordagain" value=""> 
     <br/> 
     <input type="hidden" name="NewClass" id="NewClass" value="true"> 
     <br/> 
     <input type="submit" name="submit" id="submitButton" value="submit"> 
    </form> 
    <span id = "mike"></span> 

答えて

0

あなたの問題は、$ .ajaxが同期関数ではないと仮定していることです。それは次のステートメントに進む前に、ajax呼び出しが終了するのを待つことはありません。これは、ajax呼び出しの実行時に応じて、フラグ変数が設定されている可能性があることを意味します。実際には、ajax呼び出しのラウンドトリップは、JS実行者がif文に進む必要がある時間よりも長くなるため、2以外のものに設定されることはほとんどありません。

if(flag == 1)でブレークポイントを設定すると、そこで実行が停止し、ajax呼び出しに時間がかかるため、ブレークポイントを設定すると機能しますが、そうでない場合は機能しませんブレークポイントを持つコードを次のように変更することをおすすめします。

$("#loginButton").click(function(e) { 

var un = $('#username').val();  
    $.ajax(
    {    
     type: "POST", 
     url: "Utilities/CheckUsername.php", 
     data: "un="+ un, 
     success: function(data) 
     { 

      if(data=="Username Does Not Exist") 
      {   

       // code for handling an error;      
      } 
      else 
      { 

       $('#mike').html(data); 
       $('#loginForm').submit(); 

      }     
     } 

    }); 

});

ログインボタンをクリックすると、ajaxコールでユーザー名のチェックが実行され、最後にチェックがOKのときにフォーム自体が送信されます。

関連する問題