美文网首页
关于JSONP的理解和坑点的纪录

关于JSONP的理解和坑点的纪录

作者: 陈小陌丿 | 来源:发表于2018-11-12 10:41 被阅读0次

为什么要使用JSONP

因为浏览器中的“同源策略”导致js脚本不能跨域请求数据。这时候我们想要获取别的域名下的数据就需要用到JSONP。
同源策略


JSONP 跨域的原理到底是什么

简单来说,JS 虽让不能跨域请求数据,但是可以跨域请求文件资源,例如使用CDN上的CSS,IMG,JS 等资源文件。
在浏览器加载完JS 资源文件后,就会执行该文件。
例如,a.com 有一个插件,正好b.com 需要用到这个插件。

a.com/alert.js
alert('a.com test');
b.com/index.html
<script src="http://a.com/alert.js"></script>

这时候打开 b.com/index.html 就会执行a.com/alert.js 的代码 弹出一个 警告框。延伸一下思路,既然能实现弹出文字警告我们也能传输数据。


例如 我们要获取一个叫张三的个人信息

b.com/index.html
<script>
function test_jsonp(data){
  console.log(data);
}
</script>
<script src="http://a.com/alert.php?callbackFun=test_jsonp&name=张三"></script>
a.com/alert.php

内容由动态脚本生成

test_jsonp({id:11, name:'张三', age:18, sex:'男'});

这样 打开 b.com/index.html 加载执行远端文件,继而获取到了 a.com 中的数据。


JSONP 的坑点

jsonp 只能实现GET请求,因为它是通过动态添加script代码,远端输出包含数据的可执行JS代码,然后执行对应的回调函数来获取数据。

GET传输数据的参数是有限量的,这个跟后端配置有关系。当参数过多时,可以把参数转换成数据字符串来传输。(多选列表,选中1500个 传输到后端只接受到 800个,可改服务器配置,也可改参数形式)

jsonp 不能像 ajax一样实现同步请求,但是如果 业务逻辑有需求,可以考虑把回调逻辑写到回调函数里执行。


其他有关JSONP的拓展链接。

同源策略
深入剖析jsonp跨域原理
自己封装的JSONP跨域函数

相关文章

  • 关于JSONP的理解和坑点的纪录

    为什么要使用JSONP 因为浏览器中的“同源策略”导致js脚本不能跨域请求数据。这时候我们想要获取别的域名下的数据...

  • JSONP理解和实现

    JSONP的格式 JSONP 不支持 POST的原因 i、因为JSONP是通过创建script实现的 ii、动态创...

  • jsonp原理详解

    什么是JSONP? 其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来...

  • 对jsonp和json的理解

    说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决? 用JS...

  • JSON和JSONP的简单理解

    昨日去面试,面试官问道JSONP,可惜我没能好好答出关键,直说没用过,竟不知自己在实际上有用过只是没有认识这个东西...

  • 原生实现ajax和promise实现

    http://caibaojian.com/ajax-jsonp.html我的理解:关于注册回调函数。一般要把它最...

  • jsonp理解

    1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、...

  • 理解 JSONP

    一、前置知识 页面与服务器的交互 在 AJAX 出现之前,页面与服务器的交互是怎么完成的呢? 通过提交 form ...

  • 理解jsonp

    1 什么是jsonp 首先,因为ajax无法跨域,然后开发者就有所思考 其次,开发者发现, 标签的src属性是可...

  • 对jsonp的理解

    1.jsonp不是jsonjsonp是一种跨域数据交互协议,而json是一种数据格式。2.jsonp不是ajaxa...

网友评论

      本文标题:关于JSONP的理解和坑点的纪录

      本文链接:https://www.haomeiwen.com/subject/qydqfqtx.html