从 Magento 管理扩展输出 ajax 数据的最佳方式 [英] Best way to output ajax data from a Magento Admin Extension

查看:22
本文介绍了从 Magento 管理扩展输出 ajax 数据的最佳方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm writing a Magento Admin extension that has some ajax callbacks in it. Up until now I've been echoing the json I'm feeding back through the ajax call with a simple echo statement in the controller. It "works" but I get a bunch of errors like this in my log file:

2010-12-14T15:37:05+00:00 DEBUG (7):头文件已经发送:

2010-12-14T15:37:05+00:00 DEBUG (7): HEADERS ALREADY SENT:

[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

我认为为了避免这种情况,我需要通过某种块将其推出.有人可以给我一些指导吗?

I think to avoid this I need to push it out through some sort of block. Can someone give me a little guidance on this?

推荐答案

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

Magento uses a response object to send output back to the browser. Even when you call renderLayout from a controller, Magento is just building up the string output in memory before outputting it. The reason you're getting this error is there's system code after the controller dispatch that's attempting to set headers, but your unexpected controller output prevents those headers from being set.

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

The simplest solution is throw an

exit;

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

in directly after your controller output. This halts execution, your ajax response is sent, the world is happy. Rejoice.

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

Alternately, if you're looking for that always elusive "right" way, based on examples in the core, it looks like you can call the following from your controller to retrieve the response object, and then set its body directly.

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

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

If you do the above, you're bypassing the Magento layout system and setting output directly, but keeping the responsibility of sending the output with the response object.

您可能希望为标头(JSON、XML 等)设置自己的值,您可以使用以下内容(同样来自控制器操作)

You may want to set your own values for headers (JSON, XML, etc), which you can do with something like the following (again, from a controller action)

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

祝你好运!

这篇关于从 Magento 管理扩展输出 ajax 数据的最佳方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆