JSONP跨域百度联想词

mac2022-06-30  26

模拟百度联想词  跨域 不可以用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)