我熟悉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请求:
另外,jquery在哪里放这个函数?
function jQuery2130779439534759149_1434721871588(){
// my success callback I presume
}
答案 0 :(得分: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)}
希望有所帮助。
答案 1 :(得分:0)
它实际上被添加然后删除 - 如果你检查你的DOM - 特别是在递归调用的情况下 - 你会看到DOM亮点(在Chrome开发工具中) - 无论何时进行调用 - 你可以观察到{{1执行后添加和删除标记。