JQuery валидатор удаленный метод

Я использую метод удаленной проверки и у меня есть вопросы по поводу следующего раздела http://jqueryvalidation.org/remote-method/.

Ответ оценивается как JSON и должен быть истинным для допустимых элементов, и может быть любым ложным, неопределенным или нулевым для недопустимых элементов, используя сообщение по умолчанию; или строка, например. «Это имя уже занято, вместо этого попробуйте peter123», чтобы отобразить сообщение об ошибке.

Если сервер echo('custom error');, он не проходит проверку, но ошибка не отображается. Почему бы и нет?

Если сервер выполняет echo(null); или же echo(false);или вообще не имеет эхо, клиент не получает ответ, не проходит проверку и сообщение по умолчанию не отображается. Разве не должно отображаться сообщение по умолчанию? Точно так же, если сервер выполняет echo('undefined');клиент получает неопределенное сообщение, но сообщение по умолчанию не отображается.

Серверный скрипт

<?php
header('Content-Type: text/plain;');

//The following passes validation
//echo('true');

//The following results in the client receiving 1, and "1" is displayed as error
//echo(true);
//echo(1);
//echo('1');

//The following will trigger the default message
//echo(0);
//echo('null');
//echo('false');
//echo('0');

//The following results in no ajax response to client, and no message is displayed.
//Doesn't this result in client getting undefined which should display the default message
//echo(null);
//echo(false);
//no echo at all

//Client receives "undefined", but it doesn't display the default message.  Shouldn't it?
//echo('undefined');

//Client receives "custom error", but it doesn't display this text.  Shouldn't it?
echo('custom error');
?>

Клиентский скрипт

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Testing</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.js" type="text/javascript"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
var validator=$("#myForm").validate({
rules: {
bla: {
minlength:2,
maxlength:4,
required:true,
remote: {url:"validate.php",type:'get',data:{a:1,b:2,c:3}}
//remote: "validate.php"}
},
messages: {
bla: {
remote:"default message"}
}
});
});
</script>
</head>

<body>
<form id="myForm" method="post">
<input name="bla" id="bla" value="">
<input type="submit" value="submit">
</form>
</body>
</html>

2

Решение

«Если сервер echo (‘custom error’) ;, он не проходит проверку, но ошибка не отображается. Почему нет?»

Потому что вам нужно отправить ответ сервера обратно в виде строки JSON; не обычная строка и не логическое.

echo json_encode('this is going to be the error message');

Это пройдет проверку …

echo json_encode('true');

Это потерпит неудачу при проверке и использовании дефолт сообщение…

echo json_encode('false');

Они также будут работать, как указано выше …

echo 'true'  // pass
echo 'false' // fail using default message

Это не будет работать…

echo 'custom message';

// Следующие результаты приводят к тому, что клиент получает 1, а «1» отображается как ошибка [snip] ….

Docs:

«Ответ оценивается как JSON и должен быть … любым ложным, неопределенным или нулевым для недопустимых элементов»

Все, что не интерпретируется как строка, содержащая "true", не пройдут валидацию. Поскольку вы не повторяете эти ответы как JSON, ваши сообщения об ошибках оказались очень непредсказуемыми.

Да, я согласен, что документация немного двусмысленна в отношении формулировки JSON. «оценивается как JSON» кажется, подразумевает, что плагин делает преобразование. Это не вариант. Ответ сервера должен уже будет JSON, когда он оценивается.


type:'get'

GET уже по умолчанию для remote метод и не нужно указывать.


Я создал тянуть запрос чтобы изменить документацию на это:

Ответ сервера должен быть строкой JSON, которая должна быть "true" для допустимых элементов, и может быть "false", undefined, или же null для недопустимых элементов, используя сообщение об ошибке по умолчанию. Если ответ сервера является строкой, например. "That name is already taken, try peter123 instead"эта строка будет отображаться как пользовательское сообщение об ошибке вместо значения по умолчанию.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]