【问题标题】:Best way to output ajax data from a Magento Admin Extension从 Magento Admin Extension 输出 ajax 数据的最佳方式
【发布时间】:2011-05-25 09:36:30
【问题描述】:

我正在编写一个 Magento 管理扩展,其中包含一些 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

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

【问题讨论】:

    标签: ajax magento magento-1.4


    【解决方案1】:

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

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

    exit;
    

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

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

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

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

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

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

    祝你好运!

    【讨论】:

      【解决方案2】:
      $this->getResponse()->setBody($output)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多