Удаленный вызов AJAX из проверки jQuery для проверки правильности электронной почты не работает

Я пытаюсь добавить вызов удаленного метода для проверки доступности электронной почты для проверки jQuery с использованием API REST Spring Boot.

При использовании удаленной функции из jQuery я вижу со стороны сервера значение электронной почты и ответ сервера, но в веб-клиенте не отображается ошибка «Электронная почта принята».

@RestController
public class ValidateController
{   
  @Autowired
    MemberService member;

    @RequestMapping(method = RequestMethod.POST, value = "/checkEmail")
    public ResponseEntity<Object> checkEmail(@RequestParam("email") String email) 
  {
        System.out.println("Requested by ajax validator..." + email);
        boolean _email = this.member.existEmail(email);
        return new ResponseEntity<Object>(_email, HttpStatus.OK);
    }
}
$('#validation-form').validate({
  errorElement: 'div',
  errorClass: 'help-block',
  focusInvalid: false,
  ignore: "",
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "http://localhost:8080/easyscan/checkEmail",
        type: "post",
        //dataType: "json",
        data: {
          email: function() {
            return $("#email").val();
          }
        }
      }
    }
  },
  messages: {
    email: {
      required: "Please provide a valid email.",
      email: "Please provide a valid email.",
      remote: "Email address taken."
    }
  },

Если вы проверите вкладку сети инструментов разработчика, вы увидите сделанный запрос. Убедитесь, что код ответа равен 200. Если это не так, опубликуйте результат здесь и сообщите нам текст ответа, так как он должен содержать ошибку, которую вы можете отладить.

Rory McCrossan 28.05.2019 16:34

Я проверил результат на вкладке «Сеть», как вы сказали, и код ответа 200, также на вкладке XHR в сети я вижу результат Истинный или Ложь. Но до сих пор не могу понять, почему валидатор jquery не отображает результат.

Armando Microsse 29.05.2019 09:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
1 130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, с которой я столкнулся с удаленным методом, заключалась в том, что мой сервер возвращал JSON с рядом свойств, а не только true или false, чего хочет удаленная функция. Итак, я использовал addMethod, чтобы углубиться в ответ и просто получить значение свойства JSON, которое я хотел.

$.validator.addMethod("uniqueEmail", function (value, element) {
    let emailOrgName = "yourDomain/uniqueEmailCheck?emailId = " + value;
    let result = false;
    $.ajax({
        type: "GET",
        url: emailOrgName,
        dataType: "JSON",
        success: function (data) {
            if (data.data.email === 1) {
                console.info(data.data.email + ': This email exists.');
                result = false;
            } else {
                console.info(data.data.email + ': This email does not exist.');
                result = true;
            }
        },
        async: false
    });
    console.info(result);
    return result;
});

$("#form").validate({
    rules: {
        email: {
            required: true,
            email: true,
            uniqueEmail: true,
            normalizer: function (value) {
                return $.trim(value);
            }
        }
    },
    messages: {
        email: {
            required: "Please enter your email address.",
            minlength: jQuery.validator.format("Your email address must consist of at least {0} character."),
            maxlength: jQuery.validator.format("Your email address must be no longer than {0} characters."),
            uniqueEmail: "Your Email address is already registered on our system.",
        }
    },

    // Bootstrap 4 native error style.

    errorElement: "div",
    errorClass: "is-invalid",
    validClass: "is-valid",
    errorPlacement: function (error, element) {
        error.addClass("invalid-feedback");
        if (element.prop("type") === "checkbox") {
            error.insertAfter(element.next("label"));
        } else {
            error.insertAfter(element);
        }
    },
    highlight: function (element, errorClass, validClass) {
        $(element).addClass(errorClass).removeClass(validClass);
    },
    unhighlight: function (element, errorClass, validClass) {
        $(element).addClass(validClass).removeClass(errorClass);
    }
});

Другие вопросы по теме