यदि जावास्क्रिप्ट को केवल उसी डोमेन से स्क्रिप्ट तक पहुंचने की अनुमति है, तो एक वेबसाइट कैसे मैशअप बना सकती है जिसे किसी अन्य डोमेन से सामग्री को पढ़ना और संशोधित करना होगा?
यदि जावास्क्रिप्ट को केवल उसी डोमेन से स्क्रिप्ट तक पहुंचने की अनुमति है, तो एक वेबसाइट कैसे मैशअप बना सकती है जिसे किसी अन्य डोमेन से सामग्री को पढ़ना और संशोधित करना होगा?
जवाबों:
अगर आप जिस एपीआई को एक्सेस करने की कोशिश कर रहे हैं वह JSONP को सपोर्ट करता है , तो आपको केवल आपके अनुरोध में एक जावास्क्रिप्ट फ़ंक्शन नाम प्रदान करना होगा, फिर JSONP जावास्क्रिप्ट प्रदान करता है, जैसे myfunc({the:data});
आप एक नियमित जावास्क्रिप्ट की तरह चला सकते हैं, यही वजह है कि आप एक नया <script src="www.website.com/somecall?jsonp=myfunc">
टैग बनाएंगे "एक अनुरोध भेजें" (यदि आप अनुरोधों type: jsonp
में उपयोग करते हैं तो jQuery स्वचालित रूप से ऐसा करता है $.ajax
)।
नकारात्मक पक्ष यह है कि यह JSONP का समर्थन करने के लिए एपीआई के प्रदाता की आवश्यकता है।
फ्लैश तब तक क्रॉस-डोमेन सामग्री तक पहुंच सकता है जब तक कि लक्ष्य वेबसाइट की crossdomain.xml
जड़ में एक फ़ाइल होती है जो कहती है कि यह इसकी अनुमति देता है, जो आमतौर पर सर्वर पर एक एपीआई प्रदान करता है)।
नकारात्मक पक्ष यह है कि इसके लिए उपयोगकर्ता के ब्राउज़र में फ्लैश की आवश्यकता होती है और आपको जिस वेबसाइट से डेटा मिलता है, उसके पास क्रॉसडोमेन.एक्सएमएल होना चाहिए जो क्रॉस-डोमेन अनुरोधों की अनुमति देता है।
PHP जैसी सर्वर-साइड भाषाओं में कोई बीएस-डोमेन प्रतिबंध नहीं है, इसलिए आपके पास एक स्क्रिप्ट हो सकती है जो प्रॉक्सी के रूप में कार्य करती है (उदाहरण के लिए http एक्सटेंशन के माध्यम से डाउनलोड करें जैसे कि cURL)।
अतिरिक्त लाभ यह है कि आप सर्वर पर डेटा (या यहां तक कि मैशअप कई स्रोतों) को साफ कर सकते हैं, इसे अपने वेबपेज / जावास्क्रिप्ट पर अग्रेषित करने से पहले, ताकि आप डेटा का केवल उपयोगी हिस्सा भी निकाल सकें, जो मोबाइल वेबएप के दौरान अच्छा है जहां बैंडविड्थ एक मुद्दा हो सकता है।
नकारात्मक पक्ष यह है कि सभी अनुरोधों को आपके सर्वर के माध्यम से जाना है, जिससे आपके सर्वर पर लोड बढ़ जाता है।
हालांकि लाभ यह है कि यह किसी भी स्रोत के साथ काम करेगा क्योंकि इसे क्रॉसडोमेन या जोंसप का समर्थन करने के लिए लक्ष्य की आवश्यकता नहीं है। तो अगर कुछ और काम नहीं करता है, तो यह होगा।
Internet Explorer में क्रॉस डोमेन अनुरोध है
फ़ायरफ़ॉक्स 3.5+ में क्रॉस-ओरिजनल शेयरिंग स्टैंडर्ड है , लेकिन इसके लिए आवश्यक है कि आप विशेष हेडर को शामिल करने के लिए जिस एक्सेस को एक्सेस करने की कोशिश कर रहे हैं, उदाहरण के लिए:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
कुछ अन्य प्रमुख ब्राउज़र भी इसका समर्थन करते हैं , इसलिए यदि आपको पुराने ब्राउज़रों का समर्थन करने की आवश्यकता नहीं है और यदि आप उन स्रोतों को भेजने के लिए प्रयास कर रहे हैं, जिन्हें आप एक्सेस करने का प्रयास कर रहे हैं, तो यह आपका सर्वश्रेष्ठ दांव हो सकता है, अन्यथा सर्वर-साइड स्क्रिप्ट मेरी सिफारिश होगी।
फ़ायरफ़ॉक्स में एक उपयोगकर्ता सेटिंग भी है capability.policy.default.XMLHttpRequest.open
, लेकिन मैं अपने ब्राउज़र में सेटिंग बदलने वाले उपयोगकर्ता पर भरोसा नहीं करूंगा।
आप उसके लिए एपीआई (दूसरे डोमेन का) का उपयोग कर सकते हैं। आपकी जावास्क्रिप्ट PHP फ़ाइल (या अन्य स्क्रिप्ट फ़ाइल) को कॉल करेगी जो आपके वेब सर्वर (आपके डोमेन) पर है, जो एपीआई (CURL का उपयोग करने वाले किसी अन्य डोमेन का) को कॉल करेगी और आपको प्रतिक्रिया मिलेगी।