javascript - 请教jQuery JSONP跨域原理?
伊谢尔伦
伊谢尔伦 2017-04-11 11:55:13
[JavaScript讨论组]

jQuery的$.ajax跨域时发出的请求类型是xhr,并不是script,也没有发现动态生成script标签,也没有发现类似jQuery191011762070982318096_1487035510995这样的函数。(可能是我没有发现而已)
请教jQuery是怎样动态声明callback函数的,怎样下载script文件的?
感谢回答!!

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
怪我咯

a.js

function callback(data){
  alert(data);
}

b.js

callback({name:'Li', age:13});

你自己已经解答的差不多了,如果我就把这两个文件顺序用script标签引入,会alert出传入callback的实参。

如果先声明了callback函数,然后将b.js以动态script标签引入,因为script的src引入js不受同源限制,所以我们可以请求其他服务器上的文件,其他服务器上可以根据script中的参数动态生成类似于b.js的文件,传到客户端自然会执行。

jsonp跟ajax没任何关系,jQuery只不过把他们封装在了一起,你说xhr,应该使用的是cors跨域。

两点: json是良好的数据传输形式, script标签引入文件不受同源限制

PHP中文网

1.当前页面预写好一个要执行的函数声明(即你说的回调callback)。
2.页面内资源的src属性不受跨域限制。
3.生成一个src属性是跨域请求地址的<script>标签,插入到当前页面(src中有这个回调的名字,作为参数发送给服务器)。
4.因为你插入了新元素,浏览器就会解析,并发出资源请求(想不明白,就想想插入一个图片,是不是会去请求这个图片)。
5.返回的外链script是对你第一步声明的函数的调用(数据会放在函数调用的参数中callback(data))。然后函数会被执行。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号