Проверка формы с помощью ajax, вызванного из onsubmit - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь проверить регистрационную форму с помощью ajax, основываясь на проверке, существует ли IP-адрес пользователя в моей базе данных или нет.

Фактическая проблема заключается в автоматической отправке формы независимо от того, является ли оператор my if истинным или ложным в обработчике успеха вызова ajax.Мне известно, что ajax-вызов выполняется асинхронно и что, вероятно, форма выполняется перед оператором if, но я не знаю, как это решить.

<form id="form" action="/chat/register" method="post" class="form-horizontal" role="form" onSubmit="return do_validation(this);">

ajax-вызов:

function do_validation() {
    var data = {
        "action": "check",
        "username": username,
        "password": password,
        "confirm_password": confirm_password,
        "email": email
    };
    data = $(this).serialize() + "&" + $.param(data);
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "uservisit.php", //Relative or absolute path to response.php file
        data: data,
        success: function(data) {
            if (data["ip_address"] === 0) {
                return true;
            }else{
                alert(data["ip_address"] + "\n"  + data["username"] + "\n" + data["password"] + "\n" + data["confirm_password"] + "\n" + data[$
                return false;
            }
        }
    }); return false;
}

data["ip_address"] предоставляет правильную информацию, если у меня есть ip, сохраненный в базе данных, я получаю 1 предупреждение, если не 0.

1 Ответ

0 голосов
/ 24 декабря 2018

У меня есть рабочее решение, но оно может быть не самым лучшим

var retValue = false;
var data = {
  "action": "check",
  "username": username,
  "password": password,
  "confirm_password": confirm_password,
  "email": email
};
data = $(this).serialize() + "&" + $.param(data);
$.ajax({
  global: false,
  type: "POST",
  dataType: "json",
  url: "uservisit.php", //Relative or absolute path to response.php file
  data: data,
  async: false,
  success: function(data) {
    if (data["ip_address"] === 0) { 
      retValue = true;
    }else{  
      alert(data["ip_address"] + "\n"  + data["username"] + "\n" + data["password"] + "\n" + data["confirm_password"] + "\n" + data["email"] + "\n" + data["visitlasttime"]);
      retValue = false;
   } console.log(retValue);
  }
 });
 }// End else
console.log(retValue);
return retValue;
...