V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
pine
V2EX  ›  JavaScript

jquery jsonp 请求用了新协议?

  •  
  •   pine · 2016-03-31 15:28:39 +08:00 · 2807 次点击
    这是一个创建于 3160 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我记得 jsonp 原理是创建一个 script 标签然后,然后在结果中执行一个已经写好的函数。
    但用 chrome 观察 jquery jsonp 请求的时候,没有创建 script 标签,请求也是采用 xhr 的方式请求的,不知道是我理解错了,还是 jsonp 有新的协议可用了?
    8 条回复    2016-03-31 20:16:31 +08:00
    pine
        1
    pine  
    OP
       2016-03-31 15:31:44 +08:00
    codespots
        2
    codespots  
       2016-03-31 15:35:11 +08:00
    源码还是用 script 标签
    shiny
        3
    shiny  
       2016-03-31 15:41:40 +08:00
    你看的是不是跨域 json CORS?
    CosWind
        4
    CosWind  
       2016-03-31 17:31:18 +08:00
    callback 只想完毕,会自动从 window 上删除, script 标签也是
    xieranmaya
        5
    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
        6
    CosWind  
       2016-03-31 17:36:17 +08:00
    看这个文件, script 的操作在这里面
    https://github.com/jquery/jquery/blob/master/src/ajax/script.js
    CosWind
        7
    CosWind  
       2016-03-31 17:58:15 +08:00
    所以 jquery 的 jsonp 并没有使用神奇的“新技术”,只是闭包把你绕晕了
    pine
        8
    pine  
    OP
       2016-03-31 20:16:31 +08:00
    对不起了各位,我测试的时候的的确没有跨域,可能就像 xieranmaya 说的,虽然用了 jsonp ,但没有跨域所以走的还是 xhr 。感谢 @xieranmaya @shiny

    @westooy 感谢
    @CosWind 感谢,看了你说的源码,我自己又测试一下,走的是 script 。
    对不起了各位,没好好测试就下了结论。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2846 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.