PHP-Zend3,Jquery,Ajax(发布)

时间:2018-12-10 21:57:59

标签: php jquery ajax zend-framework3

我已经使用php和zend框架构建了一个网站。在其中一页中,我有一个zend表单和一个表格。用户可以填写表格,单击搜索按钮(发生页面刷新),然后在表中获取相应的结果。

我想做的是使用Ajax实现相同的功能,因此重新加载页面时不必刷新或要求重新提交。

我从控制器中将要显示的数据传递给view.phtml。 当页面首次打开时,来自数据库的所有数据都会显示在表中。用户点击搜索后以某种方式:

  • 应该在控制器中检索ajax发布数据
  • 与其余数据进行比较,看是否有匹配项
  • 返回匹配的数据

    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); } } return new ViewModel([ 'persons' => $persons, 'form' => $form, ]); }

由于我是Web开发的初学者,并且我没有使用ajax的经验,因此我希望获得有关如何实现ajax的任何建议。

谢谢。

1 个答案:

答案 0 :(得分:0)

在执行此操作之前:

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
}