jQuery AJAX выдает ошибку, даже когда возвращает true

#jquery #jquery-plugins #jquery-validate

#jquery #jquery-плагины #jquery-validate

Вопрос:

Я проверяю AJAX внутри addMethod плагина jquery.validate. Даже когда вызов AJAX возвращает true, отображается ошибка.

Это код:

 $.validator.addMethod("checkMail", function(value, element) {
        var email_id = value;
        $.ajax({
           type: "POST",
           url: "ajax_validation.php",
           data: {'category_email_mode' : 'add_email', 'email' : email_id},
           dataType: "text",
           success: function(msg){
                if(msg == 'true')
                {
                    return true;
                }
                else(msg == 'false')
                {
                    return false;
                }
           }
        });
    }
},"Email id is already choosen");
  

Когда ajax возвращает true, функция не возвращает true. Что не так?

Ответ №1:

AJAX таким образом не работает. Вы не можете вернуть значение из успешного обратного вызова — обратный вызов — это просто то, что выполняется с данными после успешного выполнения запроса AJAX.

Если для этого необходимо использовать AJAX, вам нужно сделать его синхронным:

 $.validator.addMethod("checkMail", function(value, element) {
        var email_id = value;
        var valid = false;
        $.ajax({
           async: false, // make it synchronous
           type: "POST",
           url: "ajax_validation.php",
           data: {'category_email_mode' : 'add_email', 'email' : email_id},
           dataType: "text",
           success: function(msg){
                valid = (msg=='true');
           }
        });
        return valid;
    }
},"Email id is already choosen");
  

Тем не менее, вам, вероятно, лучше использовать встроенный PHP вместо вызова AJAX для выполнения проверки.