zouliming
(Zouliming888)
1
当我第一次进入一个页面的时候,提交表单,总是提示"验证码错误".
然后再重新修改下验证码,就ok了.
结合YII的官方BLog,发现Contact us的验证码第一次是验证成功的.
所以找了很久,才发现.如果页面中的代码中包含
,则第一次提交表单无法通过验证码的验证,去掉则可以了.希望有人能从根本上解决这个问题.
$form=$this->beginWidget('CActiveForm', array(
'id'=>'register-form',
'enableAjaxValidation'=>true,
));
DavidHHuan
(Davidhhuan)
2
这是因为使用enableAjaxValidation的时候,你输入一次,都会进行ajax请求,你是不是在验证的时候把captcha也加进去验证了,所以导致验证次数超过了你设定的次数?
clhqk
(cuileon)
3
楼上说的对,如果你不想改变流程,建议把验证码刷新的次数降低,可以改变testLimit这个值:
'captcha'=>array(
'class'=>'CCaptchaAction',
'testLimit'=>999,
),
zouliming
(Zouliming888)
4
Yes,你说的没错.不过如何可以让’enableAjaxValidation’=>false,的情况下,又不对验证码进行验证呢?如何设置?
zouliming
(Zouliming888)
5
这样会有一个弊端,就是验证码一定要验证999次,才会变一下.
到时候你就会有一个新的问题:"为什么我的验证码始终都一样?"了
zouliming
(Zouliming888)
6
好了.我知道了.
在RegsiterForm的rules的配置里
对
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
代码,修改成
array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>'register'),
就可以设置,仅仅在提交这个action的时候,才对验证码进行验证了