AJAX-запрос выполняется дважды при проверке - PullRequest
0 голосов
/ 22 сентября 2019

Я выполняю проверку для ввода электронной почты

$("#email").on("input",function() 
{
    email = $(this).val();
     const regex_1 = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

     const regex_2 = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,10})+$/;

var re1 = new RegExp(regex_1);   
var re2 = new RegExp(regex_2);   

     if(re1.test(email)===true && re2.test(email)===true)
     {
         e.preventDefault();

         $.ajax({  
                url:"Validate.php",  
                method:"POST", 

                data:'type=check_email&email='+email,  

                success:function(data)
                {  

            if(data == 'FAIL')
            {
                $("#email").addClass("is-invalid");
                $("#email").removeClass("is-valid");
                $("#email").focus();
            }
            else
            {
                $("#email").addClass("is-valid");
                $("#email").removeClass("is-invalid");
            }
                }  
           });  
     }
     else
     {
           $("#email").addClass("is-invalid");
           $("#email").removeClass("is-valid");
       $("#email").focus();
     }
        $("#email").removeClass("is-invalid");
        $("#email").removeClass("is-valid"); 
  });

Так что моя проблема в том, что когда проверка через RegEx проходит, AJAX-вызов выполняется дважды, тогда как результат первого success: function(данные) само возвращает УСПЕХ .

Два последовательных запроса для одного и того же экземпляра увеличат нагрузку на сервер без необходимости.

Лично я считаю, что моя привязка неверна или я не использовал e.preventDefault ();

Но я попытался использовать ключ изменения фокуса ввода (индивидуально, а также несколько привязок), но ничего не получалось, запрос по-прежнему выполняется дважды.

Суть в том, что только когдаТест RegEx возвращает true , тогда для запуска требуется только ajax (только один раз).Почему он работает здесь дважды?

Обязательно: электронная почта (строка) должна пройти оба теста RegEx

1 Ответ

2 голосов
/ 22 сентября 2019

Параметр события e в коде отсутствует.

$("#email").on("input",function(e)
    ...
    ...
    e.preventDefault();

Редактировать:

Чтобы предотвратить запуск нескольких событий из обработчика, вы можете return false; Из документов JQuery:

Возвращение false из обработчика событий автоматически вызовет event.stopPropagation () и event.preventDefault ().

В тех случаях, когда событие связан более одного раза, убедитесь, что только один обработчик доступен с помощью off().например,

$("#email").off('input').on("input",function(e) {
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...