php - 如何在通过 Ajax 提交的表单上重新加载验证码?

标签 php jquery zend-framework zend-form captcha

我正在使用 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/

相关文章:

php - 赋予 Zend 导航页面多个 ACL 权限

php - 如何扩展 Zend View 实现具体的功能?

php - Mysql,数据库/服务器之间的数据迁移(现在迁移,稍后定期更新)

php - 用php保存urls截图

php - 无法解析变量 Volley

javascript - 将对象与 json 中的对象进行比较,如果相同则返回

javascript - 如果 DIV 有类切换 SPAN

javascript - 需要在更改功能时计算一个值以进行复选框检查

PHP 在多维数组中查找数组

database - Zend 框架 : Populating DB data to a Zend Form dropdown element