2016-11-09 74 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編碼發送數據