我有一个正在使用Jquery's Validation Plugin验证的表单,我需要一种方法在同一个字段上通过Ajax进行至少2次验证...
示例:我有一个名为Login的字段,它接受用户名或电子邮件,我需要验证它是否是数据库中的现有电子邮件,或者它是数据库中的现有用户名,返回不同的消息并执行2用于执行这些验证的不同URL。
无论如何使用不同的消息和URL调用2个不同的远程方法,还是应该在AJAX同步调用中添加2个新方法?
修改
好吧,也许我应该说我想调用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 Validator的方法,聚合字符串中的所有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 的东西,可以在一个字段中实现多个远程方法,因此我可以在任何Ajax调用案例中使用该JqueryValidator。
这样,我的问题是“什么是最好的方法,我怎么能用jquery的代码呢?”
答案 0 :(得分:1)
我怀疑是否支持2个遥控器 但是,您可以在一个ajax调用中执行验证并在响应中返回自定义错误消息,如“已经使用用户名”或“已经使用电子邮件”。
Documentation -
响应被评估为JSON,对于有效元素必须为true,并且对于无效元素,可以是任何false,undefined或null,使用默认消息; 或字符串,例如。 “该名称已被采用,请尝试使用peter123”以显示为错误消息。