方法一:
(function(window,document){
var jsonp = function (url,data,callback) {
var dataString = url.indexOf('?') == -1 ? '?' : '&';
for(var key in data){
dataString += 'key' + '=' + data[key] + '&';
}
var cbFuncName = 'my_json_cb_' + Math.random().toString().replace('.','');
dataString += 'callback=' + cbFuncName;
var scriptEle = document.createElement('script');
scriptEle.src = url + dataString;
window[cbFuncName] = callback;
document.body.appendChild(scriptEle);
}
window.$jsonp = jsonp;
})(window,document);
方法二:
function jsonp({ url, params, callback }) {
return new Promise((resolve, reject) ={
let script = document.createElement('script')
window[callback] = function(data) {
resolve(data)
document.body.removeChild(script)
}
params = { ...params, callback } // wd=b&callback=show
let arrs = []
for (let key in params) {
arrs.push(`${key}=${params[key]}`)
}
script.src = `${url}?${arrs.join('&')}`
document.body.appendChild(script)
})
}
jsonp({
url: 'http://localhost:3000/say',
params: { wd: 'Iloveyou' },
callback: 'show'
}).then(data ={
console.log(data)
})