小编典典

从Magento Admin Extension输出ajax数据的最佳方法

ajax

我正在编写一个Magento
Admin扩展,其中包含一些Ajax回调。到目前为止,我一直在通过控制器中的简单echo语句回显通过ajax调用反馈的json。它“有效”,但是我的日志文件中出现了很多这样的错误:

2010-12-14T15:37:05 + 00:00调试(7):标头已发送:

     [0]
> /home/simplifiedsafety/www/store/app/code/core/Mage/Core/Controller/Response/Http.php:44
>     [1]
> /home/simplifiedsafety/www/store/lib/Zend/Controller/Response/Abstract.php:727
>     [2]
> /home/simplifiedsafety/www/store/app/code/core/Mage/Core/Controller/Response/Http.php:75
>     [3]
> /home/simplifiedsafety/www/store/app/code/core/Mage/Core/Controller/Varien/Front.php:188
>     [4]
> /home/simplifiedsafety/www/store/app/code/core/Mage/Core/Model/App.php:304
>     [5] /home/simplifiedsafety/www/store/app/Mage.php:599
>     [6] /home/simplifiedsafety/www/store/index.php:104

我想避免这种情况,我需要通过某种方式将其推出。有人可以给我一点指导吗?


阅读 238

收藏
2020-07-26

共1个答案

小编典典

Magento使用响应对象将输出发送回浏览器。即使您renderLayout从控制器调用,Magento也会在输出之前在内存中建立字符串输出。出现此错误的原因是,在控制器分派之后,系统代码会尝试设置标头,但是意外的控制器输出会阻止设置这些标头。

最简单的解决方案是

exit;

直接在您的控制器输出之后。这会停止执行,您的ajax响应已发送,世界很开心。麾。

或者,如果您正在寻找一种始终难以捉摸的“正确”方法,那么根据核心示例,您似乎可以从控制器中调用以下命令来检索响应对象,然后直接设置其主体。

$this->getResponse()->setBody('Some Response');

如果执行上述操作,您将绕过Magento布局系统并直接设置输出,但是要负责将输出与响应对象一起发送。

您可能想为标头(JSON,XML等)设置自己的值,您可以使用以下内容(同样,通过控制器操作)进行操作

$this->getResponse()
->clearHeaders()
->setHeader('Content-Type', 'text/xml')
->setBody('Some Response');

祝好运!

2020-07-26