跨域

跨域

首先要明白,为什么要进行跨域,首先需要了解同源策略。

同源策略

浏览器用来阻止通过一个域的脚本来操作另一个域的资源的保护机制。
这个所说的同一个域有很明确的规定:

  1. 同协议
  2. 同域名(主机名)
  3. 同端口

跨域

跨域的方式:

  1. jsonP
  2. 后端代理
  3. nginx

这里暂时先看jsonP。

jsonP

jsonP是前端常用的跨域方式。
原理:利用script标签的src属性的跨域能力,在代码中动态的创建一个script标签,将src属性设置为要访问的资源地址,并通过回调函数获取后端返回的数据。
这里根据网上的例子,利用百度搜索实现一下。

<html>
    <head>
        <meta charset="utf-8">
        <style>
            
        </style>
    </head>
    <body>
        <input type="text" id="txt">
        <ul id="more"></ul>
        <script>
            // https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&wd=a&req=2&bs=src%E5%92%8Chref%E7%9A%84%E5%8C%BA%E5%88%AB&pbs=src%E5%92%8Chref%E7%9A%84%E5%8C%BA%E5%88%AB&csor=1&cb=jQuery110203720139040550803_1584892243476&_=1584892243515

            function callback(data){
                var frags = document.createDocumentFragment();
                for(var ind in data.g){
                    var gBox = document.createElement('li');
                    gBox.innerHTML = data.g[ind].q;
                    frags.appendChild(gBox);
                }
                more.appendChild(frags);
            }
            txt.onkeyup = function(){
                more.innerHTML = '';
                var str = txt.value;
                var sc = document.createElement('script');
                sc.src = 'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&wd=' + str + '&req=2&bs=src%E5%92%8Chref%E7%9A%84%E5%8C%BA%E5%88%AB&pbs=src%E5%92%8Chref%E7%9A%84%E5%8C%BA%E5%88%AB&csor=1&cb=callback&_=1584892243515';
                document.getElementsByTagName('head')[0].appendChild(sc)
            }
        </script>
    </body>
</html>

首先获取的百度的搜索地址,将wb参数和cb参数替换为自己的,再动态创建script标签获取数据,这里回调函数自己定义,但是必须再全局声明。
在这里插入图片描述
后端处理的方式,以上述代码为例,是取得cb参数的值callback,并以"callback(要返回的json数据)"的形式返回,这里要注意的是,前后端的获取回调函数的参数名必须一致,如都是cb。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值