Magento использует объект ответа для отправки вывода обратно в браузер. Даже когда вы вызываете renderLayout
из контроллера, Magento просто создает вывод строки в памяти перед выводом. Причина, по которой вы получаете эту ошибку, заключается в том, что после диспетчеризации контроллера имеется системный код, который пытается установить заголовки, но ваш неожиданный вывод контроллера не позволяет установить эти заголовки.
Самое простое решение - бросить
exit;
в сразу после выхода вашего контроллера. Это останавливает выполнение, ваш ответ ajax отправляется, мир счастлив. Радуйтесь.
С другой стороны, если вы ищете этот всегда неуловимый «правильный» путь, основанный на примерах в ядре, похоже, что вы можете вызывать следующее из вашего контроллера, чтобы получить объект ответа, а затем напрямую установить его тело.
$this->getResponse()->setBody('Some Response');
Если вы выполните вышеизложенное, вы обходите систему макетов Magento и настраиваете вывод напрямую, но сохраняете ответственность за отправку вывода с объектом ответа.
Возможно, вы захотите установить свои собственные значения для заголовков (JSON, XML и т. Д.), Что вы можете сделать с помощью чего-то вроде следующего (опять же, из действия контроллера)
$this->getResponse()
->clearHeaders()
->setHeader('Content-Type', 'text/xml')
->setBody('Some Response');
Удачи!