问题描述
我开始使用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 Docs
Ajax帖子
$.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'));
}
}
}