ajax - 如何实现 Zend Framework 3 + Ajax 分页?
问题描述
有谁知道如何使用Zend Framework 3 (zf3)实现Ajax 分页?
我使用 Doctrine ORM 从数据库中检索数据。
解决方案
当然。实际上与普通的 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(),
];
}
在这里,您通常会在return
标准 GET 请求的最底部语句结束。在 ajax 类型请求的情况下,该语句$this->getRequest()->isXmlHttpRequest()
返回true
并且您知道它是通过发送的东西,比如说$.ajax / $.get / $.post
(通常,除非本机 JS 或类似的东西)。在这些情况下,您只想使用数据而不是完全渲染的视图进行响应。这是您返回JsonModel
.
为确保它按预期工作,您还必须JsonViewStrategy
在配置中启用。您可能希望在您global.php
的模块中启用它,而不仅仅是一个模块,如下所示,以便在任何地方启用它:
'view_manager' => [
//...
'strategies' => [
'ViewJsonStrategy',
],
],
那么,剩下要做的就是用 JavaScript 做客户端的事情了。比如确保更新分页、页面内容等。也许是一个 URI 锚......
推荐阅读
- node.js - Visual Studio 节点:调试到工作线程(节点 11)
- python - Pytorch - 无法切片 torchvision MNIST 数据集
- java - spring+tomcat应用中如何定位线程泄漏
- javascript - 点击时禁用和启用标签
- reactjs - 如何在我的代码中使用 saga 在数组中添加数据
- c# - MediaPlayerElement 循环播放视频 UWP 的问题
- java - 直接在滚动视图中过滤搜索结果
- reactjs - 使用 isRequired 时 React PropType 没有给出错误
- python - Python烧瓶添加到JSON
- python - 将 python 2 检查哈希转换为 python 3