如何在Prestashop 1.7.6中进行管理员Ajax调用

问题描述

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

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

在前端进行ajax调用是可行的(我在我的modules / mymodule / controller / front /目录中添加一个ajax.PHP文件),我试图对admin做同样的事情,但是根本无法正常工作。

我所做的:

  • actionAdminControllerSetMedia 加载js文件是可以的
  • 将此添加到composer.json文件中:
    "autoload": {
      "psr-4": {
        "MyModule\\Controller\\": "controllers/admin/"
      },"config": {
        "prepend-autoloader": false
      },
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,但从未成功(后查询返回是来自prestashop的消息,“找不到页面”,带有http 200响应。

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

谢谢

解决方法

假定它是使用Symphony的PS1.7 +模块:

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

并返回:

return $this->render
  1. 在您的views / js / back.js中”
$.ajax({
            url: adminLink,type: 'POST',async: false,data: {

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

注意:检查generateUrl和render函数以获取必要的参数。