2016-11-09 10 views
0

私はajaxを使用してZF3で非同期連絡先フォームの検証を行います。私ContactControllerザッツ は以下Zend 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())); 
     } 

} 

とjqueryのスクリプトとcontact.phtmlです。

$(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); 

      } 
     }); 
    }) 
}) 

フォームには "foo" idがあります。

問題は、私が提出したときに、私はこのようにするたびに応え得ること、である:私はexmaple「メッセージオブジェクト」 のために開いたときに(そのコンソールから)

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

、それは私を示していますのisEmpty:」メッセージフィールドが空でない場合でもフィールドは必須です!

私が間違っていることを誰にも知ってもらえますか?

+0

console.logの表示内容は何ですか? – madalinivascu

+0

ちょっと私はそれを解決しました。 Iが削除: のcontentType: "アプリケーション/ JSON;のcharset = UTF-8"、 非同期:真、今 とにconsole.log表示: -email:オブジェクト -Personalデータ:オブジェクト -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",を削除してデータを送信します。