Изменение точек останова Firefox отправить - PullRequest
0 голосов
/ 10 августа 2011

У меня есть вызов ajax, который устанавливает флаг, который может предотвратить передачу.Дело в том, что если я устанавливаю точки останова в операторах if(flag==1) и return true и перебираю код, он перенаправляет на флаг = 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>

1 Ответ

0 голосов
/ 10 августа 2011

Ваша проблема в том, что вы предполагаете, что $ .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-вызов выполнит проверку имени пользователя и, наконец, отправит саму форму, когдапроверка в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...