Я пытаюсь добавить вызов удаленного метода для проверки доступности электронной почты для проверки 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, также на вкладке XHR в сети я вижу результат Истинный или Ложь. Но до сих пор не могу понять, почему валидатор jquery не отображает результат.




Проблема, с которой я столкнулся с удаленным методом, заключалась в том, что мой сервер возвращал 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);
}
});
Если вы проверите вкладку сети инструментов разработчика, вы увидите сделанный запрос. Убедитесь, что код ответа равен 200. Если это не так, опубликуйте результат здесь и сообщите нам текст ответа, так как он должен содержать ошибку, которую вы можете отладить.