#validation #jquery #jquery-validate
#проверка #jquery #jquery-проверка
Вопрос:
У меня есть форма, которая проверяется с помощью плагина проверки Jquery, и мне нужен способ провести, по крайней мере, 2 проверки через Ajax для одного и того же поля…
Пример: у меня есть поле с именем Login, которое принимает имя пользователя или адрес электронной почты, и мне нужно проверить, существует ли это электронное письмо в базе данных или это существующее имя пользователя в базе данных, возвращая разные сообщения и выполняя 2 разных URL для выполнения этих проверок.
Есть ли в любом случае возможность вызова 2 разных удаленных методов с разными сообщениями и URL-адресами или я должен добавить 2 новых метода, основанных на синхронных вызовах AJAX?
Редактировать
Хорошо, может быть, мне следует указать причину, по которой я хочу вызвать 2 разных удаленных метода или создать 2 синхронных вызова AJAX:
Проблема в том, что я использую Zend, и я создаю систему, которая может проверять ошибки на стороне сервера (через PHP) и на стороне клиента (через Jquery Validate, созданный на лету классами PHP, который расширяется от исходных валидаторов Zend).
Пример
class Esytek_Form_JqueryValidator_NotEmpty extends Zend_Validate_NotEmpty implements Esytek_Form_JqueryValidator_Interface {
public function elementSetOptions(Zend_Form_Element $element){
$element->setRequired(true);
}
public function getJqueryCode(){
return 'required: true,';
}
public function getJqueryMessage($mensagem){
foreach ($this->_messageVariables as $ident => $property) {
$mensagem = str_replace("%$ident%", (string) $this->$property, $mensagem);
}
return 'required: "<br>'.$mensagem.'",';
}
public function getNewJqueryFunction(){
return null;
}
...
}
Esytek_Form_JqueryValidator_Interface
interface Esytek_Form_JqueryValidator_Interface extends Zend_Validate_Interface{
public function elementSetOptions(Zend_Form_Element $element);
public function getJqueryCode();
public function getJqueryMessage($mensagem);
public function getNewJqueryFunction();
}
Есть еще один класс, который слишком велик для размещения там, но, короче говоря, все, что он делает, это вызывает методы каждого средства проверки Jquery, объединяет весь код Jquery внутри строки, а затем в форме мы должны вызвать один метод, который записывает код jquery, который выполняет проверки.
В этом контексте я хочу создать класс, который мог бы генерировать более одного типа проверки ajax в одном поле для поддержки всех возможных случаев, которые могут произойти при проверке Ajax для поля ввода… Другими словами, мне нужно что-то подобное:
public function getNewJqueryFunction(){
return array ('AjaxValidation_'.$count=>'$.validator.addMethod("tel_format" '.$count.',
function(value,element) {
//Ajax call of URL
}," ");'
);
}
Или что-то вроде Esytek_Form_JqueryValidator_NotEmpty, который может реализовывать более одного удаленного метода в одном поле, поэтому я могу использовать этот JqueryValidator в любом случае вызова Ajax.
Таким образом, мой вопрос: «Какой наилучший подход и как я могу это сделать в коде jquery?»
Ответ №1:
Я сомневаюсь, что поддерживаются 2 пульта дистанционного управления.
Однако вы можете выполнить как проверку в одном вызове ajax, так и вернуть пользовательское сообщение об ошибке в ответе, например, «имя пользователя уже занято» или «электронная почта уже занята».
Документация —
Ответ оценивается как JSON и должен быть true для допустимых элементов и может быть любым false, undefined или null для недопустимых элементов, используя сообщение по умолчанию; или строка, например. «Это имя уже занято, попробуйте peter123 вместо этого», чтобы отобразить как сообщение об ошибке.
Комментарии:
1. Проблема в том, что я использую Zend, и я создаю систему, которая может проверять ошибки на стороне сервера (через PHP) и на стороне клиента (через Jquery Validate, созданный на лету классами PHP, который расширяется от исходных валидаторов Zend). В этом контексте я хочу создать класс, который мог бы генерировать более одного типа проверки ajax в одном поле для поддержки всех возможных случаев, которые могут произойти при проверке Ajax для поля ввода…
2. Я буду считать ваш ответ принятым, потому что после некоторых серьезных размышлений я думаю, что вы правы. Если бы я создал систему, которая позволяла бы пользователю выполнять более одного AJAX-вызова для поля, это было бы большей перегрузкой сервера запросами, и это можно было бы сделать только с одним URL и разными параметрами, отправленными на него.