PHP - Zend3, Jquery, Ajax (пост) - PullRequest
       8

PHP - Zend3, Jquery, Ajax (пост)

0 голосов
/ 11 декабря 2018

Я создал сайт, используя php и Zend Framework.На одной из страниц у меня есть зенд-форма и таблица.Пользователь может заполнить форму, нажать кнопку поиска (происходит обновление страницы), а затем получить соответствующие результаты в таблице.

Я пытаюсь реализовать ту же функциональность, используя Ajax, чтобы странице не приходилось обновлять или запрашивать повторную отправку при перезагрузке.

С моего контроллера я передаюданные, которые я хочу отобразить в view.phtml.При первом открытии страницы все данные из базы данных отображаются в таблице.Каким-то образом после того, как пользователь нажмет на поиск:

  • , данные поста ajax должны быть извлечены в контроллере
  • по сравнению с остальными данными, чтобы увидеть, есть ли совпадения
  • вернуть данные, соответствующие

    public function searchAction(): ViewModel
    {
        $persons = $this->personsService->getAllPersons();
        $form = $this->personsForm;</p>
    
    <code>if ($this->getRequest()->isPost()) {
        $formData = $this->params()->fromPost();
        $form->setData($formData);
    
        if ($form->isValid()) {
            $validFilteredData = $form->getData();
            $persons = $this->personsService->getPersonsAfterSearch($validFilteredData);
        }
    }
    
    return new ViewModel([
        'persons' => $persons,
        'form' => $form,
    ]);
    }
    </code>

Я хотел бы получить какие-либо предложения о том, как реализовать ajax, так как я новичок в веб-разработке, и я неопыт работы с ajax.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018

Прежде чем сделать это:

return new ViewModel([
    'persons' => $persons,
    'form' => $form,
]);

Добавьте это:

if ($this->getRequest()->isXmlHttpRequest()) {
    return new \Zend\View\Model\JsonModel(
        [
            'persons' => $persons,
            'form'    => $form,
        ]
    );
}

Примечание: вы пометили "zend-framework", но упомянули "zend3".Вышеупомянутое решение работает для ZF2 и ZF3, не знаю о ZF1.


Обновление из-за комментариев:

Полная функция будет:

public function searchAction() : ViewModel
{
    $persons = $this->personsService->getAllPersons();
    $form = $this->personsForm;

    if ($this->getRequest()->isPost()) {
        $formData = $this->params()->fromPost();
        $form->setData($formData);

        if ($form->isValid()) {
            $validFilteredData = $form->getData();
            $persons = $this->personsService->getPersonsAfterSearch($validFilteredData);
        }
    }

    $data = [
        'persons' => $persons,
        'form'    => $form,
    ];

    // AJAX response
    if ($this->getRequest()->isXmlHttpRequest()) {
        return new \Zend\View\Model\JsonModel($data);
    }

    return $data; // No need to return "new ViewModel", handled via ZF magic
}
...