2016-04-07 14 views
2

Ich versuche, die Wikidata-API zu verwenden, aber alles, was ich habe, ist immer:kann nicht zugegriffen werden Wikidata API

API https://www.wikidata.org/w/api.php?action=wbsearchentities&search=Ingmar%20Bergman&language=en&limit=20&format=json&origin=http%3A%2F%2Fwww.dev.example.com%3A3000 nicht geladen holen kann. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Ursprung 'http://www.dev.example.com:3000' ist daher nicht erlaubt. Wenn eine undurchsichtige Antwort Ihren Anforderungen entspricht, stellen Sie den Modus der Anfrage auf "Nein", um die Ressource mit deaktiviertem CORS zu holen.

Dies ist der Code:

const headers = new Headers(); 

const origin = "http://www.dev.example.com:3000"; 
headers.append("Origin", origin); 
headers.append("Content-Type", "application/json; charset=UTF-8"); 

const url = "https://www.wikidata.org/w/api.php"; 

const query = { 
    action: "wbsearchentities", 
    search: "Ingmar Bergman", 
    language: "en", 
    limit: 20, 
    format: "json", 
    origin 
}; 

const myInit = new Request(url + "?" + qs.stringify(query), { 
    method: "GET", 
    mode: "cors-with-forced-preflight", 
    headers 
}); 

fetch(myInit) 
    .then(function(res) { 
     console.log(res); 
    }) 
    .catch(function(err){ 
     console.log(err); 
    }); 

I JSONP auch kein Erfolg versucht haben. Das Ausführen der Verknüpfung im Browser (nur ohne den Ursprungsparameter) gibt eine richtige Antwort.

+1

CORS ist derzeit nur von anderen Wikimedia-Domains erlaubt. JSONP sollte funktionieren. Weitere Informationen finden Sie [diese Antwort] (http://stackoverflow.com/a/32868530/323407). – Tgr

+0

Siehe auch https://phabricator.wikimedia.org/T62835, ein Ticket mit dem Titel "Aktivieren von domainübergreifenden API-Anfragen in API-JSON-Antworten", die Ihnen hier wahrscheinlich helfen würden. – Addshore

Antwort

2

Also warum fügen Sie den "Ursprung" -Parameter überhaupt hinzu? Lassen Sie es einfach weg oder fügen Sie "& callback = some_function" hinzu, um JSONP zu erhalten.

+0

Die JSONP-Anfrage funktionierte nach dem Entfernen des Ursprungsparameters. Vielen Dank. – Slaventsiy

Verwandte Themen