La mejor manera de ajax de datos de salida a partir de una extensión de administración de Magento

StackOverflow https://stackoverflow.com/questions/4441526

  •  10-10-2019
  •  | 
  •  

Pregunta

Estoy escribiendo una extensión de Magento de administración que tiene algunas devoluciones de llamada ajax en ella. Hasta ahora he estado haciendo eco de la JSON estoy alimentando a través de la llamada AJAX con una declaración de eco simple en el controlador. Es "obras" pero me da un montón de errores como éste en mi archivo de registro:

2010-12-14T15: 37: 05 + 00: 00 de depuración (7): cabeceras 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 para empujarlo a través de algún tipo de bloque. Alguien me puede dar un poco de orientación sobre esto?

¿Fue útil?

Solución

un objeto respuesta para enviar de vuelta salida al navegador. Incluso cuando se llama desde un controlador renderLayout, Magento es sólo la construcción de la cadena de salida en la memoria antes de darle salida. La razón por la que está recibiendo este error es que no hay código del sistema después del envío controlador que está tratando de cabeceras configuradas, pero evita sus inesperados de salida del controlador esas cabeceras de ser conjunto.

La solución más simple es lanzar una

exit;

en directamente después de su salida del controlador. Esta ejecución se detiene, su respuesta se envía Ajax, el mundo es feliz. Alegrarse.

Alternativamente, si usted está buscando de esa manera siempre difícil de alcanzar "derecho", basado en ejemplos en el núcleo, que parece que se puede llamar al siguiente de su controlador para recuperar el objeto respuesta, y luego fijar su cuerpo directamente.

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

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

Es posible que desee establecer sus propios valores para los encabezados (JSON, XML, etc.), que se puede hacer con algo como lo siguiente (de nuevo, a partir de una acción del controlador)

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

Buena suerte!

Otros consejos

$this->getResponse()->setBody($output)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top