JSONP解决跨域问题怎么写

基于同源协议,许多网站不允许前端人员进行跨域数据请求。

而jsonp利用<script>标签,能够得到其他网站的 JSONP数据。

1.首先需要一个全局函数。这个函数是回调函数,由script的src地址访问之后回调的。

function getdata(data){
    console.log(data)//这里会接收参数,就是嗦访问网站返回回来的数据。
}

2.在文件中插入script标签:


//生成script标签元素
let script = document.createElement("script");
//script标签的src为数据请求地址,最后加上&callback=getdata(前面写好的全局函数的名字)
        script.src = "http://mobilecdn.kugou.com/api/v3/search/hot?format=jsonp&plat=0&count=30&callback=getdata;
        document.head.appendChild(script);   //将script元素放到head里 

重点是src部分=请求的路径+ "&callback=getdata"

这样就会在访问结束之后,回调getdata函数,并将请求到的数据塞到参数位置。

3.在需要数据的地方 ,调用回调函数,接收回数据。

 

这里做一点实例补充,如果是结合react写的代码,回调函数必须是全局函数,那么可以挂到window的身上,不然无法接收数据。

  window.getkrc=(res)=>{
            this.setState({
                data:res.data   
            })
        }
        let script = document.createElement("script");
        script.innerHTML="function getKrc(data){console.log(data)}"
        script.src = "http://mobilecdn.kugou.com/api/v3/search/hot?format=jsonp&plat=0&count=30&callback=getkrc";
        document.head.appendChild(script);   

我在window身上挂在了getkrc函数。并且吧接收到的数据直接存到了我当前js的的state状态里,因此我就可以通过this.state.data拿到数据了;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值