我在使用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);
}
非常感谢甚至阅读它...
答案 0 :(得分:1)
您无法使用jQuery / JavaScript从文件输入字段读取,这是由于js安全限制。如果我没记错的话,从文件输入元素读取的任何内容都将返回一个空字符串。
$ form-&gt; isValidPartial()方法不会执行验证,因为请求参数 mailattcht 为空。
如果这是你的最终目的,你也无法通过AJAX执行文件上传。
亲切的问候
加里