Данные ответа Zend Framework 3 AJAX

Я пытаюсь выполнить асинхронную проверку контактной формы в ZF3 с помощью 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);

            }
        });
    })
})

Форма имеет идентификатор "foo";

Проблема в том, что когда я отправляю, я каждый раз получаю такой ответ: (это из консоли)

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

и когда я открываю, например, «Объект сообщения», он показывает мне: isEmpty: «Поле требуется», даже если поле сообщения не пусто!

Может ли кто-нибудь знать, что я делаю неправильно?


person bielu000    schedule 09.11.2016    source источник
comment
что показывает console.log?   -  person madalinivascu    schedule 09.11.2016
comment
Эй, я только что решил это. Я удалил: contentType: application/json; charset=utf-8, async: true, и теперь console.log display: -email: Object -personal-data: Object -message: Object -subject: Object И когда я открываю, например, email: Object, я получаю - email: isEmpty (Обязательное поле) // Когда ввод электронной почты пуст -email : invalidFormat (это не адрес электронной почты), когда я пытаюсь отправить электронную почту, например, blablabla Итак, кажется, что это работает, по крайней мере, на данный момент. Но почему это не сработало с contentType: application/json; кодировка = utf-8, асинхронный: правда,?   -  person bielu000    schedule 09.11.2016
comment
async по умолчанию имеет значение true, поэтому ваши проблемы связаны с типом контента, ваш php-код не распознает данные в формате json, он ожидает данные как значение ключа в кодировке URL   -  person madalinivascu    schedule 09.11.2016


Ответы (1)


Удалите contentType: "application/json; charset=utf-8",, чтобы отправлять данные в виде закодированного URL

person madalinivascu    schedule 09.11.2016