मैं के रूप में अभी तक नहीं कैसे करने के लिए सही ढंग से वापसी JSONP CakePHP 2 का उपयोग की एक पूरी उदाहरण मिल गया है, तो मैं यह लिखने के लिए नीचे जा रहा हूँ। ओपी सही तरीके से पूछता है, लेकिन उसका जवाब अब 2.4 में उपलब्ध देशी विकल्पों का उपयोग नहीं करता है। उपयोग JSON (documentation)
अपने दृश्य सेट अप स्वीकार करने के लिए /:
- अपने
routes.php
कॉन्फ़िग फ़ाइल को Router::parseExtensions('json');
जोड़े 2.4+ के लिए, यह सही तरीका है, सीधे अपनी दस्तावेज़ीकरण से। इस केक बताता
- केक यहाँ स्मार्ट हो जाता है का उपयोग करने की
.json
यूआरआई एक्सटेंशन
- नियंत्रक आप जा रहे हैं घटकों की सूची को
RequestHandler
जोड़े स्वीकार करने के लिए, और अब आप सामान्य अनुरोध और JSON/XML आदि के लिए अलग अलग दृश्य प्रस्तुत करता है अनुरोध, जो आपको आवश्यकतानुसार उन परिणामों को वापस करने में लचीलापन की अनुमति देता है।
- यूआरआई
/controller/action.json
(जो दिखाई प्रयोग करेंगे /view/controller/json/action.ctp
में) का उपयोग कर यूआरआई
/controller/action
(जो दिखाई प्रयोग करेंगे
/view/controller/action.ctp
में), या
- का उपयोग कर: अब आप द्वारा अपने नियंत्रक में एक कार्रवाई का उपयोग करने के लिए सक्षम होना चाहिए
आप उन विचारों को परिभाषित नहीं करना चाहती यदि IE आप किसी भी आगे की प्रक्रिया करने की ज़रूरत नहीं है, और प्रतिक्रिया जाने के लिए तैयार है, तो आप CakePHP बता विचारों पर ध्यान न दें और वापस जाने के लिए कर सकते हैं तुरंत _serialize
का उपयोग कर डेटा। _serialize
का उपयोग करके केक को सही प्रारूप (एक्सएमएल, जेएसओएन इत्यादि) में अपनी प्रतिक्रिया को प्रारूपित करने के लिए बताएगा, हेडर सेट करें और आपको कुछ और करने की आवश्यकता के बिना इसे वापस लौटाएं (documentation)। इस जादू का लाभ उठाने के लिए:
- वे चर सेट करें जिन्हें आप वापस देखना चाहते हैं क्योंकि आप एक व्यू वेरिएबल i.e.
$this->set('post', $post);
- बताएँ केक एक्सएमएल, JSON आदि में क्रमानुसार करने
$this->set('_serialize', array('posts'));
बुला, जहां प्राचल तुम सिर्फ पिछली लाइन
में सेट दृश्य चर रहा है द्वारा और बस हो गया। केक द्वारा सभी शीर्षकों और प्रतिक्रियाओं को लिया जाएगा। यह सिर्फ JSONP (documentation) छोड़ देता है काम कर पाने के:
- केक को बताएँ
$this->set('_jsonp', true);
की स्थापना द्वारा अनुरोध एक JSONP अनुरोध पर विचार करने, और केक कॉलबैक फ़ंक्शन नाम पैरामीटर को खोजने के लिए जाना जाएगा, और उस कॉलबैक फ़ंक्शन नाम के साथ काम करने के लिए प्रतिक्रिया को प्रारूपित करें। सचमुच, यह निर्धारित करना कि एक पैरामीटर आपके लिए सभी काम करता है। public function getTheFirstPost()
$post = $this->Post->find('first');
$this->set(array(
'post' => $post, <-- Set the post in the view
'_serialize' => array('post'), <-- Tell cake to use that post
'_jsonp' => true <-- And wrap it in the callback function
)
);
और जे एस:
तो, आप .json
अनुरोधों को स्वीकार करने का केक सेट कर लेते हैं यह मानते हुए कि, इस अपने ठेठ कार्रवाई JSONP के साथ काम करने जैसा दिखाई दे सकता है
$.ajax({
url: "/controller/get-the-first-post.json",
context: document.body,
dataType: 'jsonp'
}).done(function (data) {
console.log(data);
});
केक 2.4+ के रूप में, यह JSONP अनुरोधों को संभालने का सही या इष्टतम तरीका नहीं है। मैंने अपने दस्तावेज [नीचे] (http://stackoverflow.com/a/28963737/366529) के अनुसार इसे कैसे किया जाए इसके निर्देशों को लिखा है। – dKen