简析jsonp原理

相信大部分前端都遇到过跨域问题,也知道可以用jsonp处理跨域。像jquery,extjs等一些流行的库已经为我们封装好了jsonp的解决方案,我们可以很方便的来使用。接下来我们实际案例来简单的讲一下它的基本原理。

我们都知道ajax请求时,由于同源策略,会产生跨域,但是html标签的src属性是自带跨域功能的,比如img,script,link等,jsonp就是利用script标签的src属性来实现协商跨域。另外我们也知道,当网页加载完js文件后,就会去执行这个js脚本。因此服务器可以把数据塞到这个脚本里返回给前端去处理。

我们先看一个简单的例子

一个本地页面

<html>
<head>
<script src="https://xxx.remote.com/jsonp.js"></script>
</head>
<body></body>
</html>复制代码

远程服务器的js文件

alert('我是远程文件');复制代码

这时我们会看到页面上弹出一个alert警告框,那如果我们把参数换成前端需要的数据,函数名设为前端用来处理返回数据的方法,那不就完成了我们的需求嘛,既拿到了想要的数据,并且可以按照我们想要的方式去处理数据。

结合callback参数

为了方便测试,我事先在服务器上放了一个js文件

callbackHandler({ result: 'i am the jsonp result' });
// 就是简单的执行一个js函数,在本例中我把函数名和参数都写死了。
实际应用场景中,参数应为前端所请求的数据,函数名称为前端请求时callback参数的value值,
并且由服务器来动态生成的这个js文件返回给前端
复制代码

本地页面

<html>
<head>
<script charset="utf-8">
    function callbackHandler(data) {
        console.log(data);
    }
</script>
<script src="https://xxx.remote.com/jsonp.js?callback=callbackHandler"></script>
</head>
<body></body>
</html>复制代码

截图、测试Demo



转载于:https://juejin.im/post/5c04f547f265da61602cafbe

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值