问题描述
我正在尝试在Prestashop Admin中进行Ajax调用:
我创建了一个没有配置页面的模块。它只是在某些后台页面上添加了一个按钮,我试图对我的模块文件进行ajax调用,但没有成功。
在前端进行ajax调用是可行的(我在我的modules / mymodule / controller / front /目录中添加了一个ajax.PHP文件),我试图对admin做同样的事情,但是根本无法正常工作。
我所做的:
"autoload": {
"psr-4": {
"MyModule\\Controller\\": "controllers/admin/"
},"config": {
"prepend-autoloader": false
},
- 使用以下代码(基于this documentation code)创建了 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,但从未成功(后查询返回是来自prestashop的消息,“找不到页面”,带有http 200响应。
该文档不是很有帮助,我只能找到旧消息/方法(从Prestashop 1.7.5中,我可以创建一个自定义Admin控制器,但它不起作用),有人可以向我解释一下吗?要遵循的步骤?
谢谢
解决方法
假定它是使用Symphony的PS1.7 +模块:
- 在例如您的管理控制器(src / Controller / Admin)的方法中声明链接
$adminLink = $this->generateUrl()
并返回:
return $this->render
- 在您的views / js / back.js中”
$.ajax({
url: adminLink,type: 'POST',async: false,data: {
},success: (data) => {
}
});
注意:检查generateUrl和render函数以获取必要的参数。