浅析JS中的跨域请求-图解加实例(JSONP篇)

何为跨域

简单来说就是js与异源页面进行通信,正常情况不允许js进行跨域通信的原因是其同源策略图片描述

JSONP

党我们使用XHR去获得异源的数据时,就会造成跨域请求。JSONP(JSON Padding)即填充式JSON可以来解决这样的问题。

实现原理:虽然我们不能直接请求异源上的资源,但是在js中如img,script标签却是可以得到其他服务器上的资源的,那么我们就可以通过这样的方式将一段js代码间接地从外部引入。通过script标签向目标源发起一个GET请求,服务器根据请求的参数返回包含js的代码,请看下图:
图片描述

//本地代码
<script>
    function getData(obj) {
        var data = JSON.parse(obj);
        console.log(data.name);//jiavan
        console.log(data.age);//20
    }
</script>
<script src="http://cv.jiavan.com/test/data.php?callback=getData"></script>
//服务器上的代码
<?php
    $func = $_GET['callback'];
    $data = '{"name": "jiavan", "age": 20}';
    echo $func."(".$data.");";
?>

先在本地定义了一个函数,这是用来处理来自服务器上数据的函数,下面用一个script标签,并且向服务器发起了一个GET请求,并且指定了处理数据的回调函数,即上方的getData,服务器收到请求后返回了getData('{"name": "jiavan", "age": 20}');,即使一段js代码,将数据传入到回调函数中处理,这样便完成了跨域。

总结:JSONP是很常见的处理跨域的方法,但是这种方式 只能是GET类型的请求并且需要服务器配合,这样才能完成跨域,但是它的优点就是实现比较简单并且对低版本浏览器支持都很好。

原文出处 https://github.com/Jiavan/jia... 觉得对你有帮助就给个star吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值