JavaScript(六十二)认识JSONP跨域

请求数据

同服务器下请求:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们试试不同服务器下请求,
在这里插入图片描述
能够看到我们的请求被拦截了,原因是少了“Access- control - allow - origin”头信息

,这就涉及到了跨域请求的问题

同源策略

解决跨域请求,首先要知道同源策略是什么。

同源策略:1.同协议 2.同IP/同域名 3.同端口号

如果我们下载的数据url和网页的url满足以上三个条件,那么我们就能确定他们就是同源的,我们就能够下载数据了。

ajax只能下载同源数据,跨源的数据禁止下载

之所以会这样,就是为了保证服务器的安全,如果我们允许我们的服务器去访问其他服务器的数据的话,就会导致数据不安全。

跨源的需求

跨源需求是必然存在的,特别是一些大公司。拿百度为例,他是一个大型网站,有多个网页而成,不可能将所有的数据集中在一个服务器当中,肯定是需要跨服务器请求数据的。
跨源的方式:

1.修改ajax的同源协议(不建议)

补充头文件:刚开始我们分析原因是缺少了“Access- control - allow - origin”头信息。所以我们可以补充头部信息

2.委托php文件,实现间接跨源

3.JSONP

当我们在我们的html代码的img标签中使用src去访问某张图片时,是不存在拦截现象的。因此我们可以认为img的src属性请求url不存在跨源限制的,而且是无限制的跨源
除了img的src属性,还有script的src也可以请求。但是通过上述去请求的数据没有什么意义的。因为获取到的数据只是一个常量,要想获取该数据还要赋值给变量。

jsonp原理:

在本地的script脚本中封装一个与请求的文件调用传输数据一模一样的函数名。这样不管我们js文件不管放在哪个地方下,我们都可以请求到js文件里的数据了。
在这里插入图片描述
jsonp跨域语法。

在上述图片中我们时加载页面完毕之后,就直接拿到数据了,但是我们如果想在执行某个操作之后在拿到数据的话,就不能这样。

因此我们jsonp跨域需要解决的有以下问题:

1.在需要的时候加载数据

2.能否引入除.js文件以外的其他路径

在需要的时候加载数据:动态添加script标签
在这里插入图片描述
引入别的后缀文件:

注:对于计算机来说,文件后缀是没有任何用处的。后缀的作用,只是给计算机上的软件快速识别应该用哪个软件打开。
在这里插入图片描述
JSONP使用流程:

1**.申明一个函数,这个函数有一个形参**,这个形参会拿到我们想要的下载数据,使用这个参数做后续数据处理。

2.在需要下载数据的时候,动态创建script标签,将标签src属性设置成,下载数据的链接

3.当script标签插入到页面上的时候,调用已经封装好的函数,将我们需要的数据传过来

案例:天气查询

获取某个数据接口,测试是否支持jsonp格式,在url后面拼接查询字符串callback=show(函数名)
在这里插入图片描述
在这里插入图片描述
百度

获取某个数据接口,测试是否支持jsonp格式,在url后面拼接查询字符串cb=show(函数名)
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值