2010-12-14 7 views
5

से AJAX डेटा आउटपुट करने का सबसे अच्छा तरीका मैं एक Magento Admin एक्सटेंशन लिख रहा हूं जिसमें इसमें कुछ AJAX कॉलबैक हैं। अब तक मैं जेसन को प्रतिबिंबित कर रहा हूं, मैं नियंत्रक में एक साधारण गूंज कथन के साथ AJAX कॉल के माध्यम से वापस खिला रहा हूं। यह "काम करता है" लेकिन मैं अपनी लॉग फ़ाइल में इस तरह त्रुटियों की एक गुच्छा मिलता है:Magento Admin Extension

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 

मुझे लगता है कि इससे बचने के लिए मुझे किसी प्रकार के ब्लॉक के माध्यम से इसे धक्का देना होगा। क्या कोई मुझे इस पर थोड़ा सा मार्गदर्शन दे सकता है?

उत्तर

24

Magento ब्राउज़र पर आउटपुट भेजने के लिए a response object का उपयोग करता है। यहां तक ​​कि जब आप नियंत्रक से renderLayout पर कॉल करते हैं, तो Magento इसे आउटपुट करने से पहले मेमोरी में स्ट्रिंग आउटपुट का निर्माण कर रहा है। आपको यह त्रुटि मिलने का कारण है नियंत्रक प्रेषण के बाद सिस्टम कोड है जो हेडर सेट करने का प्रयास कर रहा है, लेकिन आपका अप्रत्याशित नियंत्रक आउटपुट उन शीर्षकों को सेट होने से रोकता है।

सरल समाधान के लिए अपने नियंत्रक उत्पादन के बाद एक

exit; 
सीधे में

फेंक है। यह निष्पादन रोकता है, आपका AJAX प्रतिक्रिया भेजी जाती है, दुनिया खुश है। आनन्द।

वैकल्पिक रूप से, यदि आप कोर में उदाहरणों के आधार पर हमेशा उस छिपे हुए "दाएं" तरीके की तलाश में हैं, ऐसा लगता है कि आप प्रतिक्रिया नियंत्रक को पुनर्प्राप्त करने के लिए अपने नियंत्रक से निम्नलिखित कॉल कर सकते हैं, और फिर उसके शरीर को सीधे सेट कर सकते हैं ।

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

आप ऊपर है, तो आप Magento लेआउट प्रणाली को दरकिनार और उत्पादन सीधे स्थापित करने के लिए, लेकिन प्रतिक्रिया वस्तु के साथ उत्पादन भेजने की जिम्मेदारी रख रहे हैं।

आप अपनी खुद की मूल्यों

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

गुड लक (एक नियंत्रक कार्रवाई से, फिर से) हेडर (JSON, एक्सएमएल, आदि) है, जो आप निम्नलिखित की तरह कुछ के साथ कर सकते के लिए सेट कर सकते हैं!