2011-08-09 61 views
0

我有一個ajax調用,它設置了一個可以防止子引發的標誌。 問題是,如果我在if(flag==1)return true語句中設置了斷點並遍歷代碼,它會在標誌= 1上重定向...但是如果我不這樣做,它就不會重定向。 怎麼回事?Firefox斷點更改提交

$("#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; 
    }); 

    }); 

編輯:這仍然does not工作。爲了澄清用戶名是否不存在,我們將轉到註冊頁面,它不會告訴他們用戶名已被註冊並嘗試另一個用戶名。

<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調用的運行時間,您的標誌變量可能會設置或不設置。實際上,它幾乎肯定不會被設置爲2以外的任何值,因爲ajax調用的往返時間將比JS執行程序需要進入if語句的時間長。

當您在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調用將執行用戶名檢查並最終在檢查確定時提交表單。