【背景】
axios 本身不支持 jsonp 這種 dataType(不同于 ajax)
【解決方法】
自行封裝一個(gè) jsonp 調(diào)用方法:
? ? jsonp(url) {
? ? ? ? return new Promise((resolve, reject) => {
? ? ? ? ? ? // 這里的 "jsonCallBack" ,和調(diào)用的 jsonp 的 url 中的 callback 值相對(duì)應(yīng)(見(jiàn)粗體字)
? ? ? ? ? ? window.jsonCallBack =(result) => {
? ? ? ? ? ? ? ? resolve(result)
? ? ? ? ? ? }
? ? ? ? ? ? const JSONP = document.createElement('script');
? ? ? ? ? ? JSONP.type = 'text/javascript';
? ? ? ? ? ? JSONP.src = url;
? ? ? ? ? ? document.getElementsByTagName('head')[0].appendChild(JSONP);
? ? ? ? ? ? setTimeout(() => {
? ? ? ? ? ? ? ? document.getElementsByTagName('head')[0].removeChild(JSONP)
? ? ? ? ? ? },500)
? ? ? ? })
? ? }
調(diào)用示例:
request.jsonp(
? ? ? ? ? ? 'https://xx.map.yy.com/ss/location/v1/ip?callback=jsonCallBack&key=[KEY]&output=jsonp&_=[NUMBER]'
? ? ? ? )