无法在 zend 框架 3 中使用 ajax 发送
Can't send with ajax in zend framework 3
我正在尝试发送一个 ajax 来调用我在 GrupoUsuarioController 中的函数 'alterarPermissoesAction'。
js代码:
$.ajax({
type: 'POST',
url: '<?= $this->url( 'grupo-usuario-insumo', [ 'action' => 'alterarPermissoes' ] ) ?>',
data: dados,
dataType: 'json',
success: function( r ) {
console.log( r );
}
});
当我这样做时,zf3 尝试呈现一个页面并将该页面作为响应发送给我。
return image
我应该怎么做才能让 zf3 停止尝试呈现页面?
在您的控制器中,alterarPermissoesAction
必须以 :
结尾
return $this->getResponse()->setContent(
Json::encode(
[
[your response]
]));
但不要应用您必须在 Module.php
中指定的布局,例如:
public function onBootstrap(MvcEvent $e)
{
...
$sharedEvents = $e->getApplication()
->getEventManager()
->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch',
function ($e) {
$result = $e->getResult();
if ($result instanceof \Zend\View\Model\ViewModel) {
$result->setTerminal($e->getRequest()->isXmlHttpRequest());
} else {
throw new \Exception([your message]);
}
});
}
如果您想要数据响应,您应该确保通过 ViewJsonStrategy
使用不同的 ViewHelper
。将以下内容添加到您的模块配置中。
'view_manager' => [
'strategies' => [
'ViewJsonStrategy', // This is an alias, so add as string
],
],
接下来,您的控制器中有一个动作必须知道它必须 return Json。您可以使用 JsonModel
执行此操作。 Example in a good book - 下面的示例代码(来自 link):
namespace Application\Controller;
use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\JsonModel;
class IndexController extends ActionController
{
public function getJsonAction()
{
return new JsonModel([
'status' => 'SUCCESS',
'message'=>'Here is your data',
'data' => [
'full_name' => 'John Doe',
'address' => '51 Middle st.'
]
]);
}
}
如果您希望能够有条件地使用它,例如对于没有页面刷新的动态表单响应,您想检查请求是否为 XmlHttpRequest
,如下所示:
namespace Application\Controller;
use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\JsonModel;
class IndexController extends ActionController
{
public function getJsonAction()
{
if ($this->getRequest()->isXmlHttpRequest()) {
return new JsonModel([
'status' => 'SUCCESS',
'message'=>'Here is your data',
'data' => [
'full_name' => 'John Doe',
'address' => '51 Middle st.'
]
]);
}
return [
'normal' => 'response',
];
}
}
我正在尝试发送一个 ajax 来调用我在 GrupoUsuarioController 中的函数 'alterarPermissoesAction'。
js代码:
$.ajax({
type: 'POST',
url: '<?= $this->url( 'grupo-usuario-insumo', [ 'action' => 'alterarPermissoes' ] ) ?>',
data: dados,
dataType: 'json',
success: function( r ) {
console.log( r );
}
});
当我这样做时,zf3 尝试呈现一个页面并将该页面作为响应发送给我。
return image
我应该怎么做才能让 zf3 停止尝试呈现页面?
在您的控制器中,alterarPermissoesAction
必须以 :
return $this->getResponse()->setContent(
Json::encode(
[
[your response]
]));
但不要应用您必须在 Module.php
中指定的布局,例如:
public function onBootstrap(MvcEvent $e)
{
...
$sharedEvents = $e->getApplication()
->getEventManager()
->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch',
function ($e) {
$result = $e->getResult();
if ($result instanceof \Zend\View\Model\ViewModel) {
$result->setTerminal($e->getRequest()->isXmlHttpRequest());
} else {
throw new \Exception([your message]);
}
});
}
如果您想要数据响应,您应该确保通过 ViewJsonStrategy
使用不同的 ViewHelper
。将以下内容添加到您的模块配置中。
'view_manager' => [
'strategies' => [
'ViewJsonStrategy', // This is an alias, so add as string
],
],
接下来,您的控制器中有一个动作必须知道它必须 return Json。您可以使用 JsonModel
执行此操作。 Example in a good book - 下面的示例代码(来自 link):
namespace Application\Controller;
use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\JsonModel;
class IndexController extends ActionController
{
public function getJsonAction()
{
return new JsonModel([
'status' => 'SUCCESS',
'message'=>'Here is your data',
'data' => [
'full_name' => 'John Doe',
'address' => '51 Middle st.'
]
]);
}
}
如果您希望能够有条件地使用它,例如对于没有页面刷新的动态表单响应,您想检查请求是否为 XmlHttpRequest
,如下所示:
namespace Application\Controller;
use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\JsonModel;
class IndexController extends ActionController
{
public function getJsonAction()
{
if ($this->getRequest()->isXmlHttpRequest()) {
return new JsonModel([
'status' => 'SUCCESS',
'message'=>'Here is your data',
'data' => [
'full_name' => 'John Doe',
'address' => '51 Middle st.'
]
]);
}
return [
'normal' => 'response',
];
}
}