Конечно.Так же, как и обычный запрос 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 ...