我正在使用 Ajax 提交表单。我在表单上使用验证码,当我提交表单而没有任何验证错误时,它第一次工作完美。有时服务器会返回一些验证错误并且不提交表单。此时我需要刷新验证码图像而不重新加载整个页面。
Zend 形式的验证码:
$captcha= new Zend_Form_Element_Captcha('captcha', array(
'id'=>'captcha',
'title'=>'Security Check.',
'captcha' => array(
'captcha' => 'Image',
'required' => true,
'font' => '../public/fonts/ARIALN.TTF',
'wordlen' => '6',
'width' => '200',
'height' => '50',
'imgdir' => '../public/images/captcha/',
'imgurl' => '/images/captcha/'
)));
用于表单提交的 jQuery:
jQuery('form.AjaxForm').submit( function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
// reload captcha here
alert('Success');
},
error : function( xhr, err ) {
// reload captcha here
alert('Error');
}
});
return false;
});
如何在表单提交时重新加载验证码?
谢谢
最佳答案
我目前没有示例,但我查看了验证码是如何在表单中生成的,我认为您可能需要做的是为 json 中的验证码表单元素返回一个新的 html 代码如果表单验证失败,则响应。
验证码元素使用对创建并存储在图像文件夹中的图像的引用,并且表单 html 使用与该图像关联的 ID。
如果您调用$yourForm->getElement('captcha')->render();
并将其添加到 json 响应中,您可以使用新的验证码元素更新页面。唯一的问题是使用默认装饰器调用 render 可能会返回 <dt>
和<dd>
标签也是如此,你将不得不用 html 中的 javascript 替换它。如果您使用自定义装饰器,那么它对您来说可能会有所不同,或者您可以仅渲染图像和隐藏字段而不渲染标签并将其插入 div 标签中。
// in your controller where the form was validated
$form = new Form();
if (form->isValid($this->getRequest()->getPost()) == false) {
$captcha = $form->getElement('captcha')->render();
$json['captchahtml'] = $captcha;
}
$this->view->json = json_encode($json);
然后在你的 jquery success
中回调,检查表单验证是否失败并更新验证码 html。
希望有帮助。
关于php - 如何在通过 Ajax 提交的表单上重新加载验证码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069766/