我正在尝试对Wikipedia API进行GET请求。如下使用jQuery可以正常工作:
$.ajax({ url: 'https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=Test&callback=JSON_CALLBACK', type: 'GET', headers: {'X-Requested-With': 'XMLHttpRequest'}, crossDomain: true, dataType: 'jsonp' }).done(function(data) { console.log("Data: ", data); });
但是我想使用fetch或axios api,该API会在 飞行前 通过请求方法 OPTIONS 停止。为什么它在jQuery中起作用,但在其他API中却不起作用?
axios.get('https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace=0&gsrlimit=10&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch=Test&callback=JSON_CALLBACK', { headers: {'X-Requested-With': 'XMLHttpRequest', 'content-type': 'text/plain'} }) .then(function (response) { console.log("Response: ", response); });
我看到它可能与GET请求的Content-Type有关,在jQuery上,默认值似乎是 text / plain ,但是尝试更改fetch / axios请求的内容类型时,我没有成功作为 text / html 发送。
有什么问题的想法吗?
我发现问题与请求的内容类型无关。
问题是由于以下事实造成的:API(获取和axios)不支持 jsonp 请求。 jsonp 的使用对我来说还不够清楚,我可以在这里找到很好的解释
尽管他们不支持它,但它们提供了执行 jsonp 请求的替代方法:
axios:https : //github.com/mzabriskie/axios/blob/master/COOKBOOK.md#jsonp 提取:https : //www.npmjs.com/package/fetch-jsonp