2011-08-27 14 views
12

मैं निम्नलिखित jQuery का उपयोग कर Google Currency Calculator के साथ एक मुद्रा दर प्राप्त करने के लिए कोशिश कर रहा हूँ (डमी) कोड:उत्पत्ति 'url' द्वारा अनुमति नहीं है पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति

$.getJSON("http://www.google.com/ig/calculator?hl=en&q=1" + "DOP" + "=?" + "USD", 
     function(data) { 
      $('.currNumber').each(function (index) { 
       $(this).html(parseFloat($(this).html()) * 0.02681); 
            }); 
      }); 

XMLHttpRequest नहीं कर सकते लोड http://www.google.com/ig/calculator?hl=en&q=1DOP=?USD। एक्सेस-कंट्रोल-अनुमति-उत्पत्ति द्वारा उत्पत्ति 'hostURL' की अनुमति नहीं है।

साइट में देख रहे हैं मैं इस विषय पर विभिन्न विषयों मिल गया है, लेकिन वे ज्यादातर स्थानीय फ़ाइल पहुँच को देखें और एक अतिरिक्त पैरामीटर के साथ क्रोम शुरू करने से इसे हल करने का प्रयास (मैं भी क्रोम का उपयोग कर रहा है), लेकिन इस तरह के है मेरा मुद्दा नहीं, जो वास्तव में क्रॉस-डोमेन प्रतिबंधों से अधिक संबंधित लगता है।

तो सवाल यह है कि मैं उस यूआरएल से दर प्राप्त करने के लिए jQuery का उपयोग कैसे कर सकता हूं?

+0

के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1051748/cross-domain-scripting-error) – Joe

उत्तर

17

अजाक्स अनुरोध ब्राउज़र के Same Origin Policy द्वारा सीमित हैं। संक्षेप में, इसका मतलब है कि आप सीधे एजेक्स के माध्यम से किसी सर्वर से बात नहीं कर सकते हैं जो आपके स्क्रिप्ट में चल रहे पेज के समान डोमेन पर नहीं है। इसलिए, जब तक आप google.com के लिए कोई पृष्ठ विकसित नहीं कर रहे हैं, तो आप सीधे google.com से बात नहीं कर सकते।

वहाँ इस सीमा स्क्रिप्ट टैग की प्रविष्टि को शामिल करने के काम arounds (जे एस फ़ाइलें स्क्रिप्ट टैग के माध्यम से लोड किए गए हैं एक ही मूल नीति के अधीन नहीं) कर रहे हैं और उसके बाद JSONP कॉलबैक का उपयोग करके डेटा परिणाम उन लोगों से अपने मुख्य स्क्रिप्ट वापस करने के लिए बातचीत करने के लिए स्क्रिप्ट टैग शायद यही वह है जो आपको यहां करने की आवश्यकता है यदि आप जिस एपीआई का उपयोग करने का प्रयास कर रहे हैं उसका समर्थन करता है।

jQuery आपको बहुत मदद करेगा क्योंकि यह स्वचालित रूप से एजेक्स कॉल को जेएसओएनपी कॉल में बदल सकता है जो स्क्रिप्ट टैग के माध्यम से लोड होता है और क्रॉस डोमेन परिस्थितियों में काम कर सकता है। jQuery doc for it's ajax function के अनुसार, यह स्वचालित रूप से ऐसा करेगा यदि यह AJAX कॉल के लिए पैरामीटर स्ट्रिंग में "कॉलबैक =" देखता है या यदि आप क्रॉसडोमेन विकल्प सेट करते हैं।

+10

मैं एक कुशल वेब डेवलपर नहीं हूं ... यह कैसे पूरा किया जा सकता है? – PedroC88

+1

कृपया मेरे हालिया संपादन पढ़ें जो इसे अधिक विस्तार से वर्णित करते हैं। jQuery आपके लिए अधिकांश काम कर सकता है, लेकिन आपको AJAX कॉल को उचित रूप से कॉन्फ़िगर करना होगा। – jfriend00

+0

मैंने पहले से ही '& callback =? 'का उपयोग करने का प्रयास किया था, लेकिन इसके परिणामस्वरूप' संसाधन स्क्रिप्ट के रूप में व्याख्या किया गया था लेकिन माइम प्रकार टेक्स्ट एचटीएमएल के साथ स्थानांतरित किया गया 'मैं इसे लेता हूं इसका मतलब है कि प्रतिक्रिया में पाठ/जावास्क्रिप्ट के बजाय एक एमआईएम प्रकार का टेक्स्ट/html है लेकिन मैं इसे ठीक नहीं कर सकता क्योंकि मेरे पास प्रतिक्रिया पर नियंत्रण नहीं है ... क्या मैं कर सकता हूं? – PedroC88

2

संपादित
मैंने सोचा था कि यह स्पष्ट हो गया है कि समस्या क्या था लेकिन ऐसा लगता है यह बहुत यहाँ जाता है नहीं हो सकता है। यह त्रुटि आप देख रहे हैं कि सर्वर आपके डोमेन को AJAX अनुरोधों के माध्यम से अपने संसाधनों तक पहुंचने से प्रतिबंधित कर रहा है। यह standard JavaScript security है - आपकी स्क्रिप्ट केवल उस डोमेन से बात कर सकती है जिसकी उत्पत्ति हुई है। चूंकि आपकी जावास्क्रिप्ट को Google के डोमेन से लोड नहीं किया गया था, इसलिए यह AJAX के माध्यम से कैलकुलेटर एपीआई तक पहुंचने के लिए अनुमति देने वाले डोमेन की सूची में नहीं है और यही कारण है कि आप यह त्रुटि संदेश देखते हैं।

jQuery के साथ क्रॉस डोमेन अनुरोध करने के विकल्प outlined here हैं। जैसा कि मैंने पहले उल्लेख किया था, यदि सर्वर इसका समर्थन करता है तो JSONP केवल वैध विकल्प होगा क्योंकि इसे उचित रूप से स्वरूपित JSON वापस भेजना होगा।


यदि आप उन पृष्ठों के लिंक प्रदान करते हैं जो आप संदर्भित कर रहे हैं तो यह मदद कर सकता है।

हालांकि चीजों के दिखने से, यह एपीआई JSONP (जब तक कोई अनियंत्रित पैरामीटर न हो) का समर्थन नहीं करता है, जो इस मामले में क्रॉस-डोमेन AJAX अनुरोधों के लिए आपका एकमात्र विकल्प है क्योंकि आप सर्वर को नियंत्रित नहीं करते हैं और access control headers नहीं बदल सकता है।

आप सर्वर-साइड संसाधन बनाने पर विचार करना चाहेंगे जो जावास्क्रिप्ट सुरक्षा मॉडल जैसे the PHP script here द्वारा बाधित किए बिना आपके लिए इस एपीआई तक पहुंच जाएगा।

+0

लिंक जो पृष्ठों के लिए [क्रॉस डोमेन स्क्रिप्टिंग त्रुटि?]? जेएसओएन प्रतिक्रिया वाला एक? यह 'http: //www.google.com/ig/calculator है? Hl = en & q = 1DOP =? USD' मैं इसे वेबवर्क के लिए भी विकसित कर रहा हूं (इसलिए यह किसी भी सर्वर पर नहीं बल्कि मोबाइल में चलाएगा) – PedroC88

+0

@ PedroC88 क्या एपीआई पर दस्तावेज है? आप कहते हैं कि आपको इस विषय पर विभिन्न विषय मिल गए हैं; कहा पे? –

+0

एपीआई perse पर नहीं, ब्राउज़र की त्रुटि पर विभिन्न विषयों, वास्तव में, 'एपीआई मुझे लगता है कि टीम नहीं मिला है। – PedroC88

2

ऐसा लगता है कि यह लिंक - http://api.jquery.com/jQuery.ajax/ - जो पहले jfriend00 द्वारा प्रदान किया गया था - एक पैरामीटर बताता है जिसमें आप "क्रॉसडोमेन" नामक JQuery AJAX अनुरोध में शामिल हो सकते हैं जो एक बूलियन है।

crossdomain (डिफ़ॉल्ट: एक ही-डोमेन अनुरोध, क्रॉस-डोमेन अनुरोध के लिए सच के लिए गलत) प्रकार: बूलियन आप एक crossdomain अनुरोध (जैसे JSONP के रूप में) एक ही डोमेन पर मजबूर करने के लिए चाहते हैं, तो crossdomain का मान सेट सच में यह, उदाहरण के लिए, किसी अन्य डोमेन के लिए सर्वर-साइड रीडायरेक्शन की अनुमति देता है। (संस्करण जोड़ा गया: 1.5)

इसलिए इसे सही करने के लिए इसे हल करना चाहिए (?)। मैं एक विशेषज्ञ नहीं हूं, लेकिन मैंने इस मुद्दे पर लगातार चलने के बाद कोशिश की और यह समस्या को हल करना प्रतीत होता था।

उदाहरण:

$.ajax({ //my ajax request 
     url: "_URL_I_AM_MAKING_REQUEST_TO_", 
     type: "GET", 
     cache: false, 
     dataType: "json", 
     **crossDomain: true,** 
     data: { _mydata_ 
     success : function(response){} 
}); 
+1

यह नहीं है कि संपत्ति के लिए क्या है। यदि आप jQuery दस्तावेज़ में जो कहते हैं उसे पढ़ते हैं, तो 'यदि आप एक ही डोमेन पर क्रॉसडोमेन अनुरोध (जैसे JSONP) को मजबूर करना चाहते हैं, तो crossDomain का मान सही पर सेट करें।' यह बताता है कि यह एक ही डोमेन अनुरोध क्रॉस डोमेन वाले जैसा दिखता है। – Ian

1

जानकारी के माइनर अतिरिक्त अंक।

मुझे यह प्रश्न मिला क्योंकि मुझे यह त्रुटि मेरे सर्वर पर पोस्ट करने का प्रयास कर रही है।

समाधान: सुनिश्चित करें कि मेजबाननाम AJAX कॉल में मेल खाता है।

उदाहरण के:

//This failed 

$.post("http://domain.com/index.php/count/", 

//This succeeded (the page this was called from was www.domain.com/.....) 

$.post("http://www.domain.com/index.php/count/", 
संबंधित मुद्दे