当前位置: 首页 > 知识库问答 >
问题:

无法在zend framework 3中使用ajax发送

陆琦
2023-03-14

我试图发送一个ajax来调用我的函数在GrupoPrusarioController中的'AlterarPermissoesAction'。

js代码:

$.ajax({
    type: 'POST',
    url: '<?= $this->url( 'grupo-usuario-insumo', [ 'action' => 'alterarPermissoes' ] ) ?>',
    data: dados,
    dataType: 'json',
    success: function( r ) {
        console.log( r );
    }
});

当我这样做时,zf3尝试呈现一个页面并将该页面作为响应发送给我。

返回图像

我应该怎么做才能停止zf3尝试呈现页面?

共有2个答案

羊舌炯
2023-03-14

在控制器中,alterapermissionAction必须以以下内容结束:

return $this->getResponse()->setContent(
            Json::encode(
                [
                    [your response]
                ]));

但若不应用布局,则必须在模块中指定。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]);
            }
        });
}
施学
2023-03-14

如果需要数据响应,应确保通过ViewJsonStrategy使用不同的ViewHelper。将以下内容添加到模块的配置中。

'view_manager' => [
    'strategies' => [
        'ViewJsonStrategy', // This is an alias, so add as string
    ],
],

接下来,您的控制器中有一个操作,必须知道它必须返回Json。使用JsonModel执行此操作。好书中的例子-下面的例子代码(来自链接):

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',
        ];
    }
}
 类似资料:
  • 我使用ASP. NET Core作为后端,我试图在角7中使用ajax发送文件。我已经创建了一个FormData类的对象,并使用append方法将该文件添加到该对象中。 这是我的角度代码: 这是我的api:

  • 问题内容: 我有一个表格: 和一个函数PrepareOrder 问题是在新的ipad(Safari)上未调用操作。在桌面浏览器上,它可以正常工作。控制台中没有错误。我尝试在之后添加警报: 像那样: 并且还给我。为什么?如果不调用。我还将日志记录添加到操作中,并且没有输出字符串。 问题答案: Safari和/或Ipad支持非常强大的缓存。我的应用程序中也遇到了同样的问题。尝试向您的控制器(甚至基本控

  • 问题内容: 我试图在带有Razor的MVC 4中使用$ .ajax发出AJAX请求。我不确定如何实现它。 使用此视频,我能够成功进行返回数据的链接驱动的调用,但是我似乎无法在jquery函数中执行相同的操作。我似乎找不到如何执行此操作的任何基本示例。这就是我正在使用的: HomeController.cs View.cshtml 问题答案: 您只需要使其成为一个。另外,如果您使用的是Ajax PO

  • 我试图在点击事件上使用ajax调用servlet。从那个servlet,我称之为谷歌身份验证endpoint。我尝试将标头设置为我正在调用的servlet,但我无法摆脱此错误 XMLHttpRequest 无法加载 https://accounts.google.com/o/oauth2/auth?client_id=2536-a...nid 个人资料电子邮件 这是代码 在servlet上,我将其

  • 本文向大家介绍如何使用GET方法在jQuery Ajax中发送数据?,包括了如何使用GET方法在jQuery Ajax中发送数据?的使用技巧和注意事项,需要的朋友参考一下 jQuery.get(url,[data],[callback],[type])方法使用GET HTTP请求从服务器加载数据。 这是此方法使用的所有参数的描述- url- 包含请求发送到的URL的字符串 数据 -此可选参数表示将

  • 本文向大家介绍如何使用POST方法在jQuery Ajax中发送数据?,包括了如何使用POST方法在jQuery Ajax中发送数据?的使用技巧和注意事项,需要的朋友参考一下 jQuery.post(url,[data],[callback],[type])方法使用POST HTTP请求从服务器加载页面。 这是此方法使用的所有参数的描述- url- 包含请求发送到的URL的字符串 数据 -此可选参