ajax magento magento-1.4

La mejor forma de generar datos ajax desde una extensión de administración de Magento



magento-1.4 (2)

Estoy escribiendo una extensión de administrador de Magento que tiene algunas devoluciones de llamada ajax. Hasta ahora he estado haciendo eco de la json que estoy retroalimentando a través de la llamada ajax con una declaración de eco simple en el controlador. "Funciona", pero recibo un montón de errores como este en mi archivo de registro:

2010-12-14T15: 37: 05 + 00: 00 DEPURACIÓN (7): HEADERS YA ENVIADOS:

[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

Creo que para evitar esto necesito expulsarlo a través de algún tipo de bloqueo. ¿Alguien puede darme un poco de orientación sobre esto?


$this->getResponse()->setBody($output)


Magento usa un objeto de respuesta para enviar de vuelta la salida al navegador. Incluso cuando renderLayout desde un controlador, Magento solo está creando el resultado de la cadena en la memoria antes de imprimirlo. La razón por la que recibe este error es que hay un código de sistema después del despacho del controlador que intenta establecer encabezados, pero su salida inesperada del controlador impide que se establezcan dichos encabezados.

La solución más simple es lanzar un

exit;

directamente después de la salida de su controlador. Esto detiene la ejecución, se envía tu respuesta de ajax, el mundo está feliz. Alegrarse.

Alternativamente, si busca ese camino "correcto" siempre elusivo, basado en ejemplos en el núcleo, parece que puede llamar a lo siguiente desde su controlador para recuperar el objeto de respuesta, y luego establecer su cuerpo directamente.

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

Si hace lo anterior, está pasando por alto el sistema de diseño de Magento y estableciendo el resultado directamente, pero manteniendo la responsabilidad de enviar el resultado con el objeto de respuesta.

Es posible que desee establecer sus propios valores para los encabezados (JSON, XML, etc.), lo cual puede hacer con algo como lo siguiente (nuevamente, desde una acción del controlador)

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

¡Buena suerte!