我已经使用php和zend框架构建了一个网站。在其中一页中,我有一个zend表单和一个表格。用户可以填写表格,单击搜索按钮(发生页面刷新),然后在表中获取相应的结果。
我想做的是使用Ajax实现相同的功能,因此重新加载页面时不必刷新或要求重新提交。
我从控制器中将要显示的数据传递给view.phtml。 当页面首次打开时,来自数据库的所有数据都会显示在表中。用户点击搜索后以某种方式:
返回匹配的数据
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的任何建议。
谢谢。
答案 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
}