2011-08-09 62 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调用将执行用户名检查并最终在检查确定时提交表单。