में बाहरी यूआरएल का एचटीएमएल प्राप्त करें मैं jquery का उपयोग कर बाहरी यूआरएल के एचटीएमएल कैसे प्राप्त कर सकता हूं?jquery
jquery
उत्तर
संक्षिप्त उत्तर यह नहीं है कि आप नहीं कर सकते हैं, क्योंकि AJAX अनुरोध Same Origin Policy द्वारा समान (उप) डोमेन और पोर्ट तक सीमित हैं।
समान प्रतिबंध iframe
तत्वों पर लागू होते हैं: आप बाहरी पृष्ठ पर इंगित iframe
नहीं बना सकते हैं, और वहां से अपना HTML ले सकते हैं।
सामान्य तरीका एक सर्वर-साइड स्क्रिप्ट (PHP में लिखा गया है) का उपयोग करना है जो प्रॉक्सी के रूप में कार्य करता है: यह बाहरी साइट की सामग्री प्राप्त करता है और इसे जावास्क्रिप्ट पर वापस करता है। इसे पृष्ठ के समान डोमेन पर चलाना होगा।
जाहिर है, इस समाधान का उपयोग करते हुए, यूआरएल, छवियों, स्टाइलशीट्स और इस तरह के सापेक्ष संदर्भ (उदा। ../images/image.gif
) अब आपके पृष्ठ पर संदर्भ के रूप में काम नहीं करेंगे। चाहे वह आपकी स्थिति में एक समस्या है, बताना असंभव है। इसके लिए एक वर्कअराउंड <base>
tag का उपयोग कर सकता है।
इसके सबसे सरल रूप पर - आप नहीं कर सकते।
आप same origin policy से बंधे हैं।
आप jQuery $.get
http://api.jquery.com/jQuery.get/
उदाहरण की जरूरत है: डेटा की एक अतिरिक्त पेलोड (HTML या XML, क्या वापस आ गया था पर निर्भर करता है) के साथ test.cgi का अनुरोध से परिणाम बाहर चेतावनी।
$.get("test.cgi", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});
संपादित करें: यह केवल तभी काम करता है यदि आपका पृष्ठ एक ही डोमेन पर है।
या तो संभव नहीं है: 'iframe' का HTML मूल उत्पत्ति नीति –
के कारण मूल जावास्क्रिप्ट तक पहुंच योग्य नहीं होगा, तो वहां बिल्कुल कोई समाधान नहीं है :) – Stefanvds
आप अपने डोमेन पर किसी URL पर कॉल करने के लिए $ .ajax या $ .get का उपयोग कर सकते हैं और उसके बाद HTML को पुनर्प्राप्त करने के लिए उपयोग कर रहे सर्वर-साइड भाषा का उपयोग कर सकते हैं और फिर इसे वापस कर सकते हैं।
यह एक के बजाय दो HTTP अनुरोध है लेकिन यह आपकी समस्या के आसपास हो जाएगा।
आप अपने बैकएंड कोड में बाहरी साइट्स एचटीएमएल को भी कैश कर सकते हैं ताकि जावास्क्रिप्ट से अनुरोध हमेशा दो HTTP अनुरोधों में न हो - निश्चित रूप से, यह इस बात पर निर्भर करता है कि आप जिस HTML को पकड़ना चाहते हैं, वह कितनी बार बदल जाएगा।
उपर्युक्त पर एक मामूली मोड़ आपके सर्वर पर एक पृष्ठभूमि कार्य चलाना होगा जो प्रत्येक एक्स सेकेंड के बाहरी HTMl को पुनर्प्राप्त करता है और इसे स्थानीय रूप से सहेजता है। अपने जेएस से अपने डोमेन के लिए अनुरोध बस अपने सर्वर से नवीनतम प्रतिलिपि उठाओ। इसका मतलब है कि आपका जेएस अनुरोध किसी अन्य बाहरी HTTP अनुरोध की प्रतीक्षा करके धीमा नहीं है।
सभी सामान्य ब्राउज़र्स जावास्क्रिप्ट को समान उत्पत्ति नीति के कारण किसी अन्य (उप) डोमेन के साथ किसी भी पृष्ठ तक पहुंचने की अनुमति नहीं देते हैं। इसके आस-पास काम करने का एकमात्र तरीका अपने सर्वर पर किसी प्रकार का "प्रॉक्सी" सेट करना है (उदाहरण के लिए एक PHP स्क्रिप्ट) जो एक ही डोमेन के अंतर्गत चलता है, वह जानकारी प्राप्त करता है जो आप किसी तीसरे स्रोत से चाहते हैं और उन्हें प्रिंट करता है।
आप अपनी साइट पर एक PHP या कोई अन्य सर्वर साइड भाषा जोड़ सकते हैं जो पेज स्क्रिप्ट को लाने के लिए आपकी स्क्रिप्ट के लिए प्रॉक्सी के रूप में कार्य कर सकता है।
फिर आप अजाक्स का उपयोग करके यूआरएल के साथ अपने सर्वर साइड प्रॉक्सी को कॉल कर सकते हैं जो आपको उस पृष्ठ का HTMl वापस कर देगा।
हम इसे कर सकते हैं। इसे आज़माएं: http://crossorigin.me/ –
यहां एक ब्लॉग है: https://blog.codepen.io/2015/07/10/crossorigin-me/ –
@ कुशलजेसवाल जो बिल्कुल "सर्वर" है साइड स्क्रिप्ट जो प्रॉक्सी के रूप में कार्य करती है "जिसका मैंने उल्लेख किया था। यह कई समस्याओं के साथ आता है, जिनमें से एक साइट पर वर्तमान में ऑफ़लाइन होने के कारण सचित्र है, शायद भारी भार के कारण। किसी भी प्रकार के पेशेवर उपयोग के लिए, यह सेवा "हम इसे कर सकते हैं" से बहुत दूर है –