2016-11-09 48 views
0

我尝试使用ajax在ZF3中进行异步联系表单验证。 这就是我的ContactControllerZend Framework 3 AJAX响应数据

public function contactAction() 
{ 
    $form = $this->form; 
    $request = $this->getRequest(); 
    $response = $this->getResponse(); 
    $vm = new ViewModel(['form' => $this->form]); 

    $form->setInputFilter(new ContactFormFilter()); 

    if (!$this->getRequest()->isPost()) 
     return new ViewModel(['form' => $this->form]); 

    $data = $request->getPost(); 

    $form->setData($data); 

     if (!$form->isValid()) 
     { 
      $vm->setTerminal(true); 
      return $response->setContent(\Zend\Json\Json::encode($form->getMessages())); 
     } 

} 

及以下contact.phtml用jQuery脚本。

$(function(){ 
    $("#foo").submit(function(event){ 
     event.preventDefault(); 


     $.ajax({ 
      url: '/kontakt', 
      type: 'POST', 
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
      async: true, 
      data: ($("#foo").serialize()), 
      success: function (data) { 
       console.log(data); 
       alert(data); 
      }, 
      error: function (data) { 
       console.log(data); 

      } 
     }); 
    }) 
}) 

Form has“foo”id;

的问题是,当我提出我得到这样每次都回答:(其从控制台)

Object 
-email :Object 
-message :Object 
-subject :Object 
-personal-data :Object 

,当我打开〔实施例“的消息对象” 它让我看到:的isEmpty:”字段是必需的“即使消息字段不是空的!

任何人都可以知道我在做什么错?

+0

console.log显示什么内容? – madalinivascu

+0

嘿,我刚解决它。 予删除: 的contentType: “应用程序/ JSON;字符集= UTF-8”, 异步:真, 和现在的console.log显示: -email:对象 - 个人数据:对象 -message:对象 -subject:对象 当我打开例如电子邮件:对象,我得到 - 电子邮件:的isEmpty(“字段必填”)//当电子邮件输入为空 -email:invalidFormat(“那不是一封电子邮件adres“)当我尝试发送电子邮件像blablabla 所以它似乎有效,至少现在。 但为什么它不适用于 “contentType:”application/json; charset = utf-8“, async:true,” ? – bielu000

+0

async默认为true,所以你的问题是内容类型,你的php代码不能识别json格式的数据,它期望数据为url编码的关键值 – madalinivascu

回答

0

删除contentType: "application/json; charset=utf-8",以url编码发送数据