jsonp的原理和简单实现

思路:
1.利用script标签的src不受跨域限制的原理
2.动态创建一个script标签,src里面就是请求的接口,
(直接在地址栏里输入地址都是get请求,所以jsonp只支持get请求)
3.等这个请求完成了,通过你传入的回调函数名字接收值

封装jsonp

	function jsonp(url, fn) {
		//路径和回调函数
		//cbName是自己随便起的名字,这个名字用来接收回调函数
		const cbName = 'cb' + Math.random().toString().replace('.', '')//路径拼接回调函数的名字
		url += '&callback=' + cbName;
		//创建script标签
		let script = document.createElement('script');
		//设置src
		script.src = url;
		//window下取这个名字,拿回调函数接收值
		window[cbName] = cdData => {
			//cbData 这个值在这里就拿到了
			fn(cdData);  
			//接收完了,就移除并且置为空 提升性能
			document.body.removeChild(script);
			window[cbName] = null;
		}
		//把创建好的script标签添加到body里面
		document.body.appendChild(script);
	}

调用

		getResult(val) {
			//利用百度实现jsonp
			const url = 'https://m.baidu.com/sugrec?prod=wise&wd=' + val
			执行jsonp的函数,传入地址和接收值的回调函数,	
			jsonp(url, data => {
				//data就是值,
				this.sugList = data.g.map(item => {
					return item.q
				})
				console.log(this.sugList);
			})
		}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值