JSONP跨域 百度联想词

模拟百度联想词  跨域 不可以用Ajax 不支持跨域

解决跨域手段

1、flash

2、服务器中转代理

浏览器受同源策略的限制不可以实现跨域访问 可首先访问本地服务器 由本服务器代理访问百度服务器 将数据带回本地再经由浏览器访问本地服务器获取数据,完成跨域

3、jsonp    数据交换协议  动态创建script标签实现

4、document.domain(针对基础域名相同的情况)

bj.58.com  document.domain = '58.com'

tj.58.com  document.domain = '58.com'

----------------------------------------------------------------------

JSONP原理

1.Web页面上用<script> 引入 js文件时则不受是否跨域的影响 (不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>)

2.于是我们把数据放到服务器上,并且数据为json形式(因为js可以轻松处理json数据)

3.因为我们无法监控通过<script>的src属性是否把数据获取完成,所以我们需要做一个处理。

4.实现定义好处理跨域获取数据的函数,如 function doJSON(data){}。

5.用src获取数据的时候添加一个参数cb=‘doJSON’ (服务端会根据参数cb的值返回 对应的内容)   此内容为以cb对应的值doJSON为函数真实要传递的数据为函数的参数的一串字符 如 doJSON(’数据’)

固定步骤

动态创建script标签   设置src的路径   将标签下插入到body中

 

 

jsonp跨越访问与Ajax本质区别

jsonp通过动态创建script标签来实现跨域操作

Ajax通过创建xmlhttpRequest()对象来实现数据的请求

 

以下实现百度联想词

<script>
        var inp = document.getElementById('inp');
        var ul = document.getElementById('ul');
        inp.oninput = function() {
            var value = this.value;
            var oscript = document.createElement('script');
            oscript.src = 'https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=1432,21123,29523,29721,29568,29220&wd=' + value + '&r&cb=show';
            //wd指的是搜索字段 cb指的是请求数据后回调函数
            $('body').append(oscript);
        }

        function show(data) {
            console.log(data);
            var str = '';
            var res = data.g;
            if ((res)) {
                res.forEach(ele => {

                    str += '<li> <a href="https://www.baidu.com/s?ie=UTF-8&wd=' + ele.q + '">' + ele.q + '</a></li>'
                    //wd指的是搜索字段 cb指的是请求数据后回调函数
                    //原理相同只是用的百度地址
                    ul.innerHTML = str;
                    ul.style.display = 'block'

                });
            } else {
                ul.style.display = 'none'
            }

        }
    </script>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值