Проверить функцию Form, содержащую Ajax JQuery - PullRequest
0 голосов
/ 10 ноября 2018

Я наконец-то заставил свою функцию Ajax работать должным образом, но теперь у меня есть другая программа. Кажется, мои функции проверки формы возвращаются до завершения Ajax. Если открыть мой консольный журнал, console.log (результат), прямо перед моим возвращаемым результатом; распечатывает перед моим console.log (соответственно), найденным в функции успеха. поэтому моя валидная форма продолжает возвращать false и, следовательно, моя форма не отправляется. Но я знаю, что мой успех поражает, потому что я вижу это дамп в журнале консоли. С чего бы это? Нужно ли обернуть мою функцию готовым документом или чем-то еще?

Ниже мой код

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> </script>
<script>
function validateForm(){
  var email = document.forms["signupform"]["email"].value;
  var result = false;
  if (email != ""){
    $.ajax({           
      type: "POST",  
      url: "/CheckEmail2.php",  
      data: { "User_Email": email },
      dataType: "json",
      success: function(resp){
        console.log(resp);
        if(resp.reply == "Not Found"){
          result = true;
          return result;
        }
        else
        {
        result = false;
        return result;
        }

      },
      //error: function(data, status){
        //console.log(data, status);
        //alert("error");
      //}
    }); //end Ajax
  }
  console.log(result);
  return result;
};
</script>

1 Ответ

0 голосов
/ 10 ноября 2018

Основная проблема в том, что ajax является асинхронным, поэтому повторный запуск функции происходит задолго до завершения ajax.

Вы можете использовать встроенную отправку элемента формы внутри успеха и использовать флаг, чтобы обойти ajax

var isValid = false
function validateForm(){
  var form = document.forms["signupform"]
  var email = form["email"].value;

  if (email != "" && !isValid){
    $.ajax({           
      type: "POST",  
      url: "/CheckEmail2.php",  
      data: { "User_Email": email },
      dataType: "json",
      success: function(resp){
        isValid = true
        // submit the form
        form.submit()
      }
    }); //end Ajax
  }

  return isValid ;
};
...