有人知道如何使用 Zend Framework 3 (zf3)实现 Ajax分页吗?
我使用了Doctrine ORM从数据库中检索数据。
答案 0 :(得分:0)
好的。确实与普通的GET请求相同,因为它涉及xml http request
,因此您只会动态地进行响应。
例如,以下indexAction
use Zend\View\Model\JsonModel;
// class, other use-statements, etc
public function indexAction()
{
$page = $this->params()->fromQuery('page', 1); // get page from GET, default page 1
/** @var QueryBuilder $qb */
$qb = $this->getObjectManager()->createQueryBuilder();
$qb->select('u')
->from(User::class, 'u')
->orderBy('u.createdAt', 'DESC');
$paginator = new Paginator(new OrmAdapter(new OrmPaginator($qb)));
$paginator->setCurrentPageNumber($page);
$paginator->setItemCountPerPage(25);
if ($this->getRequest()->isXmlHttpRequest()) {
return new JsonModel([
'paginator' => $paginator,
'queryParams' => $this->params()->fromQuery(),
]);
}
return [
'paginator' => $paginator,
'queryParams' => $this->params()->fromQuery(),
];
}
在这里,您通常会在标准GET请求的最底部return
语句中结束。对于ajax类型的请求,语句$this->getRequest()->isXmlHttpRequest()
返回true
,并且您知道它是通过$.ajax / $.get / $.post
发送的(通常,除非是本机JS或类似的东西)。在这些情况下,您只想响应数据,而不响应完全呈现的视图。这是您返回JsonModel
的时候。
为确保其按预期工作,还必须在配置中启用JsonViewStrategy
。您可能希望在global.php
中启用此功能,而不是仅在下面的模块中启用它,以便在任何地方都启用它:
'view_manager' => [
//...
'strategies' => [
'ViewJsonStrategy',
],
],
那么剩下要做的就是使用JavaScript进行客户端操作。就像确保您更新了分页,页面内容等一样。也许是URI锚...