首页 > 解决方案 > 如何从 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 发送错误消息(但我认为使用该代码发送错误是个坏主意)。非常感谢您的帮助。

标签: prestashopprestashop-1.7

解决方案


下面显示了使用 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'));
            }
        }
    }  

推荐阅读