求详解,差了很多解释太简单了,不明白。。
function myfunc(data) {
console.log(data)
}
<!-- callback参数对象对应上面callback函数名 -->
<script src="//example.com/jsonp.js?callback=myfunc"></script>
myfunc({"foo": "bar"}) //数据传入到了callback函数
本质上是通过script标签获取数据, script标签是只支持GET的
jsonp的本质就是动态生成一个script scr指向目标url
取回形如
xxx({"key1":"value1","key2":"value2"})的js并执行
在这之前你得先定义一个叫xxx方法
比如
const xxx=(...rest)=>console.log(rest);
从而获取到你所谓的jsonp过程想传递的信息。
那么现在问题就变成了script标签引入js的http请求能不能为post 显然答案是否定的
通过标签获取数据!
通过标签获取数据!
通过标签获取数据!
(跟我读三遍!)
JSONP 的本质是动态向页面中插入一个 script
标签加载跨域内容,显然这种办法没办法由 POST 实现。
如果你用post、XmlHttpRequest就一定会去检查是否跨域!
楼上这个说的挺通俗的:
<script src="http://跨域/...xx.js"></script>
引申: 跨域技术里面有个方法叫图像 Ping,图片通过src可以在你网站域名下访问任何网站的图片地址。一个道理
光理解概念没用, 你要理解它的由来.
jsonp 本来就不是一项语言标准, 而是一个供求双方的补偿约定. 这个是问题的本质, 你说理解不了的话从这个含义入手, 很多东西就水到渠成了.
包括为什么用 <scritp src="xxx?callback=foo"></script> 这种形式, 还有为什么不是你说的 post 等.
这是个以小见大的 接口设计/定义/补偿/约定.
算了, 如果不明白你就当我胡说吧
10 回答11k 阅读
6 回答2.9k 阅读
5 回答4.7k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
JSONP
的最基本的原理是:动态添加一个<script>
标签,而script
标签的src
属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest
协议无关了。可以说
jsonp
的方式原理上和<script src="http://跨域/...xx.js"></script>
是一致的,因为他的原理实际上就是 使用js
的script
标签 进行传参,那么必然是get
方式的了,和浏览器中敲入一个url
一样