e.PreventDefault и ajx submit не работают вместе [return true] не работает - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть функция, чтобы проверить, существует ли электронная почта, но я хочу отправить форму, только если электронная почта не существует

Итак, я написал следующую функцию:

$("#form-1").on("submit",function(e){
     e.preventDefault();
    var given_email=document.getElementById("email");

     var data = $("#form-1").serialize();
     $.ajax({    
            type : 'POST',
            url  : 'check.php',
            data : data,
            beforeSend: function() { 
                $(".submit").val('sending ...');
            },
            success :  function(response) {

                var response = JSON.parse(response);      
                if(response.status=='error'){
                  alert("Sorry This Email Already Used ");
                         return false;               
                } if(response.status=='true') {
                    return true;
                    $(this).submit();
                }
            }
        });
});

Сейчасесли он вернет истину, я также не могу отправить форму.Пожалуйста помоги.я видел этот вопрос и ответ e.preventDefault не мешает отправке формы .Но без эффекта

Примечания

даже я пытался

  if(response.status=='true') { $("#form-1").submit(); } .

Но это также не работает

1 Ответ

2 голосов
/ 27 апреля 2019

Оператор возврата возвращается до отправки формы

if(response.status == 'true') {
  //return true; // returns before the form is submitted
  $(this).submit();
  return true; // move return after submit
}

Предложение

Вы думаете об этом, неправильный путь, пусть PHP обработает проверку и вставит в бэкэнд.

Первое решение

В вашем PHP сделайте что-то вроде

$querycheck = mysqli_query($con,"SELECT * FROM Persons");
$countrows = mysqli_num_rows($querycheck );;
if($countrows == '1')
{
  echo json_encode(['message' => 'Sorry This Email Already Used']);
}
else
{
 // insert statement here 
 echo json_encode(['message' => 'Submitted']);
}

В вашем JS

$("#form-1").on("submit",function(e){
 e.preventDefault();
var given_email=document.getElementById("email");

 var data = $("#form-1").serialize();
 $.ajax({    
        type : 'POST',
        url  : 'check.php',
        data : data,
        beforeSend: function() { 
            $(".submit").val('sending ...');
        },
        success :  function(response) {

            var response = JSON.parse(response);
            alert(response.message); // display the message here to the user.    
        }
    });
 });

Второе решение

сохранить форму в переменной.

$("#form-1").on("submit",function(e){
 e.preventDefault();

const form = $(this); // get the current form

var given_email=document.getElementById("email");

 var data = $("#form-1").serialize();
 $.ajax({    
        type : 'POST',
        url  : 'check.php',
        data : data,
        beforeSend: function() { 
            $(".submit").val('sending ...');
        },
        success :  function(response) {

            var response = JSON.parse(response);      
            if(response.status=='error'){
              alert("Sorry This Email Already Used ");
                     return false;               
            } if(response.status=='true') {
                form.submit(); // submit the form here
                return true;
            }
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...