0

我正在尝试在 Prestashop Admin 中进行 ajax 调用:

我创建了一个没有配置页面的模块。它只是在一些后台页面中添加一个按钮,我试图对我的模块文件进行 ajax 调用但没有成功。

在前端进行 ajax 调用是有效的(我在我的 modules/mymodule/controller/front/ 目录中添加了一个 ajax.php 文件),我尝试为管理员做同样的事情,但它根本不起作用。

我做了什么:

  • 从actionAdminControllerSetMedia加载 js 文件就可以了
  • 在 composer.json 文件中添加这个:
    "autoload": {
      "psr-4": {
        "MyModule\\Controller\\": "controllers/admin/"
      },
      "config": {
        "prepend-autoloader": false
      },
  • 使用此代码创建了controllers/admin/ajax.php文件(基于此文档代码):
namespace MyModule\Controller;
use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;

class DemoController extends FrameworkBundleAdminController
{
    public $auth = false;
    public $ssl = true;
    public $ajax = true;
    public $errors = false;
    public $message;

    public function __construct()
    {
        parent::__construct();
    }
 
    public function initContent()
    {
        parent::initContent();
    }
    
    public function postProcess()
    {
        PrestaShopLogger::addLog("MODULE CONTROLLER OK ", 1);
    }

    public function displayAjax()
    {
            $this->ajaxDie(json_encode(array('success'=> !$this->errors, 'message' => $this->message)));
    }
}

然后我尝试在 js 中以不同的方式调用 ajax,但从未奏效(post 查询返回是来自 prestashop “找不到页面”的消息,带有 http 200 响应。

该文档不是很有帮助,我只能找到旧的消息/方法(从 Prestashop 1.7.5 我可以创建一个自定义管理控制器,但它不起作用),有人可以解释我要遵循的步骤?

谢谢

4

1 回答 1

1

假设它用于 PS1.7+ 模块,使用 Symphony:

  1. 在您的管理控制器(src/Controller/Admin)的方法中声明一个链接,例如
$adminLink = $this->generateUrl()

并返回:

return $this->render
  1. 在你的意见/js/back.js"
$.ajax({
            url: adminLink,
            type: 'POST',
            async: false,
            data: {

            },
            success: (data) => {
            }
        });

注意:检查 generateUrl 和 render 函数是否有必要的参数。

于 2020-11-10T09:45:56.650 回答