jquery jsonp 请求用了新协议?

2016-03-31 15:28:39 +08:00
 pine
我记得 jsonp 原理是创建一个 script 标签然后,然后在结果中执行一个已经写好的函数。
但用 chrome 观察 jquery jsonp 请求的时候,没有创建 script 标签,请求也是采用 xhr 的方式请求的,不知道是我理解错了,还是 jsonp 有新的协议可用了?
2780 次点击
所在节点    JavaScript
8 条回复
pine
2016-03-31 15:31:44 +08:00
codespots
2016-03-31 15:35:11 +08:00
源码还是用 script 标签
shiny
2016-03-31 15:41:40 +08:00
你看的是不是跨域 json CORS?
CosWind
2016-03-31 17:31:18 +08:00
callback 只想完毕,会自动从 window 上删除, script 标签也是
xieranmaya
2016-03-31 17:36:01 +08:00
去年遇到过一个问题专门分析过这段代码,如果我没记错,JSONP 内部调的是 getScript,getScript 内部又调了$.ajax,然后 getScript 这个函数里面进行了一些判断,会尝试能否把 js 用 xhr 请求下来,如果能请求下来,拿到源代码,跟据是否有'use script'模式选择 eval 还是插入 script 标签,总之判断条件比较复杂,但是可靠性非常高.

说一下我当时遇到的情况,我用 jQuery 加载 html 片段直接到页面上面,然后这个 html 片段里面有 script:src 标签,jQuery 为了保证可用性是会运行 script 里引用的这个里面的 js 文件的,而且还能保证运行顺序!运行方式就是我上面说的这样,所以猜测你可能也遇到了相同或者类似的情况
CosWind
2016-03-31 17:36:17 +08:00
看这个文件, script 的操作在这里面
https://github.com/jquery/jquery/blob/master/src/ajax/script.js
CosWind
2016-03-31 17:58:15 +08:00
所以 jquery 的 jsonp 并没有使用神奇的“新技术”,只是闭包把你绕晕了
pine
2016-03-31 20:16:31 +08:00
对不起了各位,我测试的时候的的确没有跨域,可能就像 xieranmaya 说的,虽然用了 jsonp ,但没有跨域所以走的还是 xhr 。感谢 @xieranmaya @shiny

@westooy 感谢
@CosWind 感谢,看了你说的源码,我自己又测试一下,走的是 script 。
对不起了各位,没好好测试就下了结论。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267655

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX