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

Chr*_*ris 5 ajax magento magento-1.4

我正在编写一个Magento Admin扩展,其中包含一些ajax回调.到目前为止,我一直在回应json,我正在通过ajax调用反馈控制器中的一个简单的echo语句.它"工作",但我在我的日志文件中得到了一堆这样的错误:

 

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

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

Ala*_*orm 24

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

最简单的解决方案是抛出一个

exit;
Run Code Online (Sandbox Code Playgroud)

在控制器输出后直接输入.这会停止执行,你的ajax响应被发送,世界很高兴.麾.

或者,如果您正在寻找始终难以捉摸的"正确"方式,基于核心中的示例,您似乎可以从控制器调用以下内容来检索响应对象,然后直接设置其主体.

$this->getResponse()->setBody('Some Response');
Run Code Online (Sandbox Code Playgroud)

如果您执行上述操作,则会绕过Magento布局系统并直接设置输出,但保留使用响应对象发送输出的责任.

您可能希望为标题(JSON,XML等)设置自己的值,您可以使用以下内容(再次,从控制器操作)执行此操作

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

祝好运!


clo*_*eek 5

$this->getResponse()->setBody($output)
Run Code Online (Sandbox Code Playgroud)