function JSONP({ url, params, callbackName }) {
const generateUrl = () => {
let str = '';
for (let key in params) {
str += `${key}=${params[key]}&`;
}
str += `callback=${callbackName}`;
return `${url}?${str}`;
}
return new Promise((resolve, reject) => {
const scriptElm = document.createElement('script');
scriptElm.async = true;
scriptElm.src = generateUrl();
scriptElm.type = "text/javascript";
scriptElm.onerror = error => {
reject(error);
}
window[callbackName] = data => {
resolve(data);
document.body.removeChild(scriptElm);
delete window[callbackName];
}
document.body.appendChild(scriptElm);
});
}
const params1 = {
city: 'New York',
apiKey: 'your-api-key'
};
const callbackName1 = 'handleWeatherResponse';
JSONP({
url: 'https://api.weather.com',
params: params1,
callbackName: callbackName1
}).then(data => {
console.log(data);
}).catch(error => {
console.error('Error:', error);
});
const params2 = {
userId: '123456',
apiKey: 'your-api-key'
};
const callbackName2 = 'handleUserInfoResponse';
JSONP({
url: 'https://api.example.com',
params: params2,
callbackName: callbackName2
}).then(data => {
console.log(data);
}).catch(error => {
console.error('Error:', error);
});