Jquery Firefox断点更改提交

Jquery Firefox断点更改提交,jquery,ajax,firefox,Jquery,Ajax,Firefox,我有一个ajax调用,它设置了一个可以阻止提交的标志。 问题是,如果我在ifflag==1上设置断点并返回true语句并逐步遍历代码,它会在flag=1上重定向…但是如果我不这样做,它永远不会重定向。 发生什么事了 $("#login").submit(function(e) { var flag = 2; var un = $('#username').val(); $.ajax( { type: "POST",

我有一个ajax调用,它设置了一个可以阻止提交的标志。 问题是,如果我在ifflag==1上设置断点并返回true语句并逐步遍历代码,它会在flag=1上重定向…但是如果我不这样做,它永远不会重定向。 发生什么事了

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

您的问题是,您假设$.ajax是一个同步函数,而事实并非如此。它不会等到ajax调用完成后才进入下一条语句。这意味着,根据ajax调用的运行时,可能会设置或不设置标志变量。事实上,它几乎肯定不会被设置为2以外的任何值,因为ajax调用的往返时间将比JS执行器前进到if语句所需的时间长

当您在ifflag==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();

            }                   
        }

    });
})

单击login按钮时,ajax调用将执行用户名检查,最后在检查正常时提交表单本身