小编典典

如何在提取/ axios跨站点请求上使用JSONP

ajax

我正在尝试对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 发送。

有什么问题的想法吗?


阅读 431

收藏
2020-07-26

共1个答案

小编典典

我发现问题与请求的内容类型无关。

问题是由于以下事实造成的:API(获取和axios)不支持 jsonp 请求。 jsonp
的使用对我来说还不够清楚,我可以在这里找到很好的解释

尽管他们不支持它,但它们提供了执行 jsonp 请求的替代方法:

axios:https
:
//github.com/mzabriskie/axios/blob/master/COOKBOOK.md#jsonp
提取:https :
//www.npmjs.com/package/fetch-jsonp

2020-07-26