2013-12-11 9 views
6

मैं अपने एपीआई का उपयोग कर ट्विटर से डेटा प्राप्त करने के लिए अजाक्स का उपयोग कर रहा हूं। मैं jsonp का उपयोग करने की कोशिश कर रहा हूं और जो मैं देख सकता हूं और समझ सकता हूं, मुझे लगता है कि मैं सब ठीक कर रहा हूं (स्पष्ट रूप से हालांकि नहीं)।JSONP क्रॉस मूल त्रुटि 'कोई एक्सेस-कंट्रोल-अनुमति-उत्पत्ति हेडर मौजूद नहीं है'

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </script> 
<script> 
    $(document).ready(function() { 
     $.ajax({ 
      type: 'GET', 
      datatype: 'jsonp', 
      data: {}, 
      crossDomain: 'true', 
      url: "http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=?", 
      error: function(textStatus, errorThrown) { 
       alert("error"); 
      }, 
      success: function(msg) { 
       console.log(msg); 
      } 
     }); 
    }); 
</script> 

ऊपर कोड Chrome और Firefox दोनों XMLHttpRequest में कोई त्रुटि उत्पन्न http://twitter.com/status/user_timeline/padraicb.json?count=10&callback= लोड नहीं कर सकते?। अनुरोधित संसाधन पर 'पहुंच-नियंत्रण-अनुमति-उत्पत्ति' शीर्षलेख मौजूद नहीं है। उत्पत्ति 'शून्य' इसलिए पहुंच की अनुमति नहीं है।

मेरी समझ से मैंने सोचा कि &callback=? और jsonp पर टाइप सेट होने से यह सफल हो जाएगा। और भी यह है कि मैं जेएसओएन ऑब्जेक्ट को फिडलर में लौटा रहा हूं, इसे सिर्फ स्क्रिप्ट द्वारा निपटाया नहीं जा रहा है। मैंने एक ही समस्या के साथ कई एपीआई की कोशिश की है।

पता बार में प्रवेश करते समय ऐसा एक एपीआई भी काम करता है।

तो मैं व्यापक खोज के बाद और देख रहा हूं कि मुझे कुछ को * पर सेट करने की आवश्यकता है? मैंने सोचा कि यह एक सर्वर पक्ष मुद्दा था?

मैंने ?callback? भी कोशिश की है लेकिन इसका कोई फायदा नहीं हुआ है।

कोई भी विचार अद्भुत धन्यवाद होगा।

+2

पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति हैडर सर्वर पर सेट किया जाना चाहिए। इस मामले में, सर्वर ट्विटर से संबंधित है। [यहां और पढ़ें] (http://stackoverflow.com/questions/10143093/origin-is-not-allowed-by-access-control-allow-origin) –

+0

@ पॉल रेन तो यह ऐसा कुछ नहीं है जो स्वचालित रूप से कॉन्फ़िगर किया जाएगा उनके द्वारा? एक सार्वजनिक एपीआई होने के नाते मैंने सोचा कि यह उनके द्वारा संभाला जाएगा? – Corey

+0

@Corey यह डिज़ाइन द्वारा है। वे अब तक अपने एपीआई को अनधिकृत अनुरोध नहीं चाहते हैं। वे चाहते हैं कि आप अनुरोध करने के लिए एक एपीआई कुंजी और सर्वर का उपयोग करें। – Munim

उत्तर

14

उक्त संसाधन jsonp का समर्थन करता है, तो CORS की कोई आवश्यकता नहीं ... समस्या datatype: 'jsonp' है यह होना चाहिए है dataType: 'jsonp'

$(document).ready(function() { 
    $.ajax({ 
     type: 'GET', 
     dataType: 'jsonp', 
     data: {}, 
     url: "http://twitter.com/status/user_timeline/padraicb.json?count=10&callback=?", 
     error: function (jqXHR, textStatus, errorThrown) { 
      console.log(jqXHR) 
     }, 
     success: function (msg) { 
      console.log(msg); 
     } 
    }); 
}); 

डेमो: Fiddle

+1

@RobW 't' और' T' ...कुंजी केस संवेदनशील –

+0

@RobW वास्तव में नहीं देखती है http://jsfiddle.net/arunpjohny/Beryp/3/ - यह विफल हो जाती है, लेकिन यदि आप $ .getJSON() का उपयोग कर रहे हैं तो यह http://jsfiddle.net/ arunpjohny/Beryp/4 / –

0

हेडर को प्रतिक्रिया देते समय ट्विटर के सर्वर पर सेट किया जाना चाहिए। यदि यह उपलब्ध नहीं है, तो इसका मतलब है कि आप AJAX का उपयोग करके अपने संसाधन के बाहर कहीं भी इस संसाधन तक नहीं पहुंच सकते हैं।
इसलिए, आप ब्राउज़र पर जावास्क्रिप्ट से अपने एपीआई का उपयोग नहीं कर सकते हैं। आपके पास अपना स्वयं का सर्वर सेट अप है जो ट्विटर एपीआई के साथ संवाद करने के लिए एक मध्यवर्ती संसाधन के रूप में कार्य करता है।

संपादित करें: इस बिंदु पर इंगित करने के लायक भी है कि ट्विटर अपने अनधिकृत API अनुरोधों को बंद कर रहा है। आपको ट्विटर के साथ एक ऐप सेट अप करने और अनुरोध करने के लिए एपीआई कुंजी का उपयोग करने की आवश्यकता है।

+0

ठीक है, तो ब्राउज़र के माध्यम से सीधे इसे कैसे पहुंचाता है, इसका मतलब है कि 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिनिन' को '*' पर सेट किया गया है या क्या सर्वर इस अनुरोध को अलग-अलग संभालता है? मैं इस तरह से Twitters एपीआई का जिक्र नहीं कर रहा हूँ। – Corey

+1

@ कोरी हां, ब्राउज़र में सीधे यूआरएल खोलने से 'एक्सेस-कंट्रोल-ऑब्जेक्ट-ओरिजिन' हेडर का सम्मान नहीं होता है, सर्वर इसे अलग-अलग संभालता है। ट्विटर ने आपके अनुसूची में अनधिकृत अनुरोधों को रोकने के लिए अपने कार्यक्रम में है .. मुझे यकीन नहीं है कि यह पहले से ही किया गया है या नहीं। लेकिन सिद्धांत (और मेरा जवाब) सभी एपीआई के लिए समान है। – Munim

संबंधित मुद्दे