jsonp的简单实现

jsonp的简单实现

function jsonp(url, data) {
	// 1.将data中的数据拼接到url中
	let params = '';
	for (key in data) {
	    params += key + '=' + data[key] + '&';
	}
	url += '?' + params + 'callback=cbFn';
	// 2.在全局环境下创建jasonp要调用的回调函数,挂载到window上
	window.cbFn = function(data) {
	    res = data;
	    // 5.成功后删除script节点
	    delete window.cbFn;
	};
	// 3.创建script节点,设置src属性,回调函数名
	const script = document.createElement('script');
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('src', url);
	script.onload = () => {
		document.body.removeChild(script);
	};
	// 4.附加在body节点后
	const body = document.body.appendChild(script);
	}

包装Promise的jsonp

function jsonp(url, params, callbackName) {
   const geneateURL = (url, callbackName) => {
       let res = '';
       const keys = Object.keys(params);
       for (let key of keys) {
           res += `${key}=${params[key]}&`;
       }
       res = url + '?' + res + 'callback=' + callbackName;
       return res;
   };

   return new Promise((resolve, reject) => {
       callbackName = callbackName || Math.random().toString().replace('.', '');
       const script = document.createElement('script');
       const genURL = geneateURL(url, callbackName);
       script.setAttribute('src', genURL);
       window[callbackName] = (data) => {
           resolve(data);
           delete window[callbackName];
           document.body.removeChild(script);
       };
       document.body.appendChild(script);
   });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值