2010-10-06 13 views
13

का उपयोग कर रहा JSON के रूप में विकिपीडिया से कुछ सामग्री प्राप्त करने की कोशिश की है:मीडियाविकि एपीआई से कोई प्रतिक्रिया नहीं jQuery

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json", function(data) { 
    doSomethingWith(data); 
}); 

लेकिन मैं जवाब में कुछ भी नहीं मिला है। यदि मैं ब्राउज़र की एड्रेस बार में पेस्ट करता हूं, तो

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles=jQuery&format=json 

मुझे कुछ अपेक्षित सामग्री मिलती है। क्या गलत है?

उत्तर

31

आप क्वेरी स्ट्रिंग पर &callback=? जोड़ने, इस तरह से $.getJSON() साथ JSONP व्यवहार को गति प्रदान करने की जरूरत है:

$.getJSON("http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&callback=?", function(data) { 
    doSomethingWith(data); 
}); 

You can test it here

JSONP का उपयोग किए बिना आप same-origin policy पर क्लिक कर रहे हैं जो XmlHttpRequest को किसी भी डेटा को वापस पाने से रोक रहा है।

+3

आप इस तरह के एक सरल बेला बनाने के लिए बहुत बहुत धन्यवाद। मैं घंटों तक हमला कर रहा हूं और आपकी साधारण चीज़ ने मुझे क्लिक किया है। धन्यवाद। – MoshMage

+0

मैं सोच क्यों यह काम नहीं किया, भले ही http://jsonlint.com/ है कि इसके लिए एक वैध अनुरोध कहा घंटे के लिए इस परीक्षण किया गया था। धन्यवाद! –

+0

यह अब और काम नहीं करता है। यह एकमात्र तरीका है जिसे मैंने विकिपीडिया: https://jsfiddle.net/tqeL3od2 खोजना पाया – vault

0

यदि आपको किसी अन्य डोमेन से डेटा प्राप्त हो रहा है, तो आपको getJSONP का उपयोग करना होगा, यह "same origin policy" का हिस्सा है।

संपादित

असल में क्या निक ने कहा, आपकी क्वेरी स्ट्रिंग के अंत पर थप्पड़ &callback=?getJSONP आह्वान करने के लिए।

+1

कोई '$ .getJSONP()' नहीं है :) –

+0

हाँ मैं तो बस सोचा था कि, संपादित :-) धन्यवाद –

3

अन्य उत्तर के रूप में बाहर बिंदु, आप एक क्रॉस-डोमेन अनुरोध कर रहे हैं।

एक ही जवाब है जो अब काम करता है और जो वे दोनों दे दिया है JSON के बजाय JSONP उपयोग करने के लिए है, लेकिन वहाँ एक और उत्तर CORSCross-origin resource sharing कहा जाता है।

हालांकि, भले ही CORS मीडियाविकि द्वारा समर्थित है, यह अभी तक विकिपीडिया पर यह और कैसे विकिपीडिया के कैशिंग काम करता है के बीच बारीकियों की वजह से सक्षम नहीं है।

यह विकिपीडिया Enable $wgCrossSiteAJAXdomains for wikimedia sites में काम करने के लिए एक खुली बग रिपोर्ट है।

इस बार जब आप ब्राउज़रों जो CORS समर्थन से JSONP की जरूरत के बिना विकिपीडिया के क्रॉस-डोमेन AJAX अनुरोध करने के लिए सक्षम हो जाएगा हल हो गई है। सभी प्रमुख ब्राउज़रों के नवीनतम संस्करण अब सीओआरएस का समर्थन करते हैं। इंटरनेट एक्सप्लोरर के लिए इसका मतलब संस्करण 10 है जो बहुत से लोग नहीं चल रहे हैं। संस्करण 9 में एक वैकल्पिक समाधान है जिसे कहा जाता है जिसे अधिक लोकप्रियता नहीं मिली है। JSONP के बजाय CORS अनुरोध करने के लिए

0

एक विकल्प स्पष्ट रूप से उदाहरण के लिए, अनुरोध URL में पैरामीटर origin=* शामिल करने के लिए है:

var title = "jQuery"; 
 

 
$.getJSON("https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles="+title+"&format=json&origin=*", function(data) { 
 
    console.log(data.query.pages); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>