prestashop - 如何从 PrestaShop ModuleFrontController 返回带有错误 http 代码的 ajax 响应?
问题描述
我开始使用 PrestaShop 1.7.6(在使用 Symfony 之前)并且我向 PrestaShop 编写了一些自定义模块,但现在我想从我的前端控制器模块发送 json 数据给用户。如果我发送带有 http 代码 200 的 json,一切正常,但现在我想发送带有正确 http 代码(例如 400)的错误消息。在 Symfony 中,我可以通过使用 JsonResponse 来做到这一点(我在这里尝试这样做,但它没有按预期工作)。我在 presta 控制器中看到只有两种带有 ajax 响应的方法(ajaxDie - 已弃用和 ajaxRender),但它们都是不作为参数 http 代码响应并始终发送 200。
if (!$product) {
$json = Tools::jsonEncode(['status' => false]);
$this->ajaxRender($json);
//return new JsonResponse($json, Response::HTTP_BAD_REQUEST);// doesn't send proper code
}
谁能告诉我如何从扩展 ModuleFrontController 的模块前端控制器发送错误代码?现在对我来说唯一可能的操作是使用 http 代码 200 发送错误消息(但我认为使用该代码发送错误是个坏主意)。非常感谢您的帮助。
解决方案
下面显示了使用 AJAX 发送和接收数据的正确方法。更多信息可以在Prestashop 文档中找到
阿贾克斯邮报
$.ajax({
type: 'POST',
dataType : 'json',
url: 'linktoyourfile.php',
data: { action: 'getMyrequest' },
success: function(data) {
alert(data.result);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error: ' + textStatus + ' ' + errorThrown);
}
});
模块前控制器
class TestModuleFrontController extends ModuleFrontController
{
public function init()
{
parent::init();
}
public function displayAjaxGetMyrequest()
{
// ERROR HANDELING
if ($this->errors) {
die(Tools::jsonEncode(array('hasError' => true, 'errors' => $this->errors)));
} else {
echo Tools::json_encode(array('result' => 'test result'));
}
}
}
推荐阅读
- python - 如何让我的代码循环重复?
- anylogic - 模型逻辑错误:如果我不放置队列块,我的模型将不起作用,但是这个块会减慢进程
- java - 在 java netbeans 和 mysql 中插入数据时出错
- python - 在 await call.write(msg) 上捕获 ExecuteBatchError 异常
- javascript - 将javascript文件导入json文件
- python - 遍历 python 和 pandas 循环
- mysql - TypeError:无法读取未定义的属性“同步”
- cefsharp - CefSharp 是否实现了 DOM 操作(2020 年末)?
- reactjs - 反应最终形式添加额外的字段作为道具
- javascript - DISCORD.JS - 我在使用“member.roles.set([role1,role2] 如何解决这个问题?