Zend文件输入表单ajax验证

时间:2011-04-20 18:37:18

标签: zend-framework jquery zend-form

我在使用ajax验证zend表单的文件输入时遇到了困难,基本上我能够从正常的文本输入中获取错误消息,但从来没有从文件输入中获取,即使硬编码html请求和将它发送到validate函数,可能是错误的但是zend不验证ajax发送的文件输入,但它确实使用了正常的isvalid(post)方法。我尝试了$ .ajax或$ post jquery函数,但没有改变任何东西......以下是不同的部分: 形式:

class Form_ContactForm extends Zend_Form
{
    public function init ()
    {
        $this->setName("email");

        $this->setMethod('post');



        $mailsubject =new Zend_Form_Element_Text('mailsubject', array(

        'required'   => true,

        'filters'    => array('StringTrim')


        ));
        $mailsubject->removeDecorator('Errors');
        $this->addElement($mailsubject, 'mailsubject');

        $mailattcht = new Zend_Form_Element_File('mailattcht');
        $mailattcht->setDestination(APPLICATION_PATH.'/../public/mails');
        $mailattcht->addValidator('Count', false, 1);
        $mailattcht->addValidator('Size', false, 8000000);
        $mailattcht->addValidator('Extension', false, 
        'jpg,png,gif,ppt,pptx,doc,docx,xls,xslx,pdf');
        $mailattcht->removeDecorator('label');
        //$mailattcht->removeDecorator('Errors');

        $this->addElement($mailattcht, 'mailattcht');


        $mailbody =new Zend_Form_Element_Textarea('mailbody', array(

        'required'   => true,

        'filters'    => array('StringTrim'),

        'cols' => 40, 

        'rows' => 10


        ));
        $mailbody->removeDecorator('Errors');
        $this->addElement($mailbody, 'mailbody');


        $sendcopy = new Zend_Form_Element_Checkbox('sendcopy');
        $sendcopy->removeDecorator('label');
        $this->addElement($sendcopy, 'sendcopy');

        $this->addElement('submit', 'send', 
        array('required' => false, 'ignore' => true, 'label' => 'Send'));

       /* $this->addElement('hidden', 'return', array(
        'value' => Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(),                         
                ));*/



        $this->setAttrib('enctype', 'multipart/form-data');

    }

}

观点:

jQuery(document).ready(function() 
        {

    $('#send').click(function(event)
                    {

                        event.preventDefault();

                        doValidation(); 

                    });

        });

function doValidation()
    {
        var url = '/ceramstar/public/contact/validateform';
        var data = {};
        $("input").each(function(){
                data[$(this).attr('name')] = $(this).val();

        });
        data[$("#mailbody").attr('name')] = $("#mailbody").val();


        $.ajax({
              type: 'POST',
              url: url,
              enctype: 'multipart/form-data',
              data: "mailsubject=&MAX_FILE_SIZE=8388608&mailattcht=2012.srt&sendcopy=1&send=Send&mailbody=",
              success: function(resp){
                   alert(resp);
                },

              dataType: "json"
            });


//      $.post(url,data,function(resp)
//          {
//          
//                      $('#contact').submit();
//                      
//                      if (resp == "[]"){
//                      window.top.location.href='<?php echo $this->baseUrl().'/contact/thankyou';?>';
//                      parent.$.fancybox.close();
//                      
//                      
//                      }
//                      
//                      
//
//          },"json");




    }

验证功能:

public function validateformAction()
    {

        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->layout->disableLayout();
        $form = new Form_ContactForm();

        $form->isValidPartial($this->_getAllParams());
        //$form->isValidPartial($_FILES);

        $json = $form->processAjax($form->getValues());
        header('Content-type: application/json');
        echo Zend_Json::encode($json);
    }

非常感谢甚至阅读它...

1 个答案:

答案 0 :(得分:1)

您无法使用jQuery / JavaScript从文件输入字段读取,这是由于js安全限制。如果我没记错的话,从文件输入元素读取的任何内容都将返回一个空字符串。

$ form-&gt; isValidPartial()方法不会执行验证,因为请求参数 mailattcht 为空。

如果这是你的最终目的,你也无法通过AJAX执行文件上传。

亲切的问候

加里