Ajax:如何使用jQuery获取表单,并使用Zend Form来验证它

时间:2013-06-14 17:38:34

标签: jquery zend-framework zend-form

在这种情况下,我有一个简单的表单,不是由Zend生成的:

<form id='com-prefs'>
  <input type='checkbox' name='accept-sms' />
  <input type='checkbox' name='accept-phone' />
  <input type='checkbox' name='accept-email' />
  <!-- etc -->
</form>

表单比这长,但它基本上只是更多的输入。 Zend_Form的表单创建看起来很臃肿,因为我将与其他人一起处理这个项目,所以我不觉得使用Zend表单创建使事情复杂化。但是,Zend_Form的验证似乎更有用,我想通过Ajax使用它。

我的问题是,如何使用jQuery(或常规JS)获取上述表单,并将其转换为可以轻松使用以下内容的Zend_Form:

$form->isValid();

serializeArray()是我想去的路线吗?

编辑:使用ZF1

2 个答案:

答案 0 :(得分:0)

我在寻找的确是serializeArray()。 Zend_Form验证器接收'name'=&gt;的数组。 '值'=&GT; =等。

.serializeArray()创建一个多维数组,表示其值已设置的表单中的所有元素(或者在复选框和单选按钮的情况下,其值为'checked')。

答案 1 :(得分:0)

我做了些什么可能对你有用。
IndexController.php 中添加以下操作:

public function checkformAction(){
    $this->_helper->layout()->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);

    if($this->getRequest()->isPost()){
        $data = $this->getRequest()->getPost();
        $form = new $data["zend_form"]();
        unset($data["zend_form"]);
        echo $form->processAjax($this->getRequest()->getPost());
    }else{
        echo false;
    }
}

在全局Javascript文件中,我添加了这个函数:

function validate(form,zend_form){
  $.ajax({
    url: '/index/checkform/',
    data:  $(form).serialize()+'&zend_form='+zend_form,
    type: 'post',
    success: function(response) {
        response = $.parseJSON(response);
        if(response == true){
            $(form).removeAttr("onsubmit");
            $("#submit").click();
        }
        $("ul.errors").remove();
        $.each(response,function(key,value){
            var errorlist = '<ul class="errors">';
            $.each(value,function(key,value){
                errorlist += '<li>'+value+'</li>';
            });
            errorlist += '</ul>';
            $("#"+key).after(errorlist);
        });
    }
  });   
  return false;
}

最后在init()函数的每个表单类中添加 onsubmit 属性:

class Frontend_Form_Doc extends Zend_Form
{
   public function init()
   {
      $this->setMethod('post');
      $this->setAttrib("onsubmit","return validate(this,'Frontend_Form_Doc')");

      .....

   }
}