【问题标题】:why can't I see the script tag injected by jquery in jsonp request?为什么在jsonp请求中看不到jquery注入的脚本标签?
【发布时间】:2015-06-19 13:46:32
【问题描述】:

我熟悉 JSONP 及其工作原理,但我注意到一些令人困惑的地方。

当使用数据类型为“jsonp”的 jquery 的 $.ajax 方法时,我读过的每个帐户都表明 jquery 会将脚本标记注入 dom 以发出请求。

我的代码有效(在我的基本测试页面上),但是当我使用 Chrome 开发工具进行检查时,我没有看到任何注入的脚本标签。什么给了?

$.ajax({

    url: "https://status.github.com/api/status.json",

    dataType: "jsonp",

    type: "GET",

    success: function( response ) {
        console.log( response ); // successfully logs data from github
    }

});

查看网络选项卡时,这是 url jquery 请求:

https://status.github.com/api/status.json?callback=jQuery2130779439534759149_1434721871588&_=1434721871589

还有,jquery把这个函数放在哪里了?

function jQuery2130779439534759149_1434721871588(){
   // my success callback I presume
}

【问题讨论】:

    标签: javascript jquery ajax json jsonp


    【解决方案1】:

    这是我不久前在网上读到的(并记下我的参考)。 jQuery 所做的只是在回调(成功函数)执行完成之前将脚本标签添加到 DOM。标签被添加到标题中。它还向窗口对象添加了一个函数,该函数在返回时被调用。

    jQuery2130779439534759149_1434721871588 只是一个生活在窗口对象上的对象,是一个动态添加的函数。当函数执行完毕后,它会从窗口对象中移除自己。

    回调相关函数(来自缩小的 jQuery 源代码)如下所示。

    function(q){n=q;b();d();z[i]=v;try{delete z[i]}catch(p){}A&&A.removeChild(B)}
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      它实际上是被添加然后删除的——如果你检查你的 DOM——尤其是在递归调用的情况下——你会看到 DOM 亮点(在 Chrome 开发工具中)——无论何时进行调用——你可以观察到 <Script..>执行后添加和删除标签。

      【讨论】:

        猜你喜欢
        • 2014-05-18
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-24
        相关资源
        最近更新 更多