minggeJS
minggeJS copied to clipboard
接着打脸 1.7.3 jsonp 当已存在callback且被调用的时候, jsonp 的回调函数不会执行
<script>
function callback(v){
console.log("test...", v);
}
$.getJSON('11.php?action=getWeather&callback=?', function(v){
console.log(1111111111, v);
});
callback('123123');
</script>
PS: 想解决这个问题的话, 去学学 jQuery
是怎么实现 jsonp 的吧.
<script>
function callback(v){
console.log("test...", v);
}
$.getJSON('11.php?action=1&callback=?', function(v){
console.log(1111111111, v);
});
setTimeout(function(){
callback('123123');
}, 300);
</script>
1.php
<?php
$action = intval(@$_GET['action']);
if($action == 1){
sleep(7);
}else{
sleep(2);
}
echo $_GET['callback'], '(', time() , ');';
测试代码, 产生的问题是 callback 调用混乱, 最后的那个其实是想调用输出 test 的那个. 但其实是调用了 jsonp 中的那个.
当然没有, 不信你自己试, 同样的代码, 你引入 jQuery
结果就是正确的.
不过, 但你觉得你这样做了之后, 你当初所吹的性能超过 jQuery
的new bee
, 不就实现不了吗?
而且你换成 iframe 之后,也不一定就能解决你的问题.
你不是对 jQuery 的底层 了如指掌吗? 怎么现在才知道应该用随机?
即使名字是固定的, jQuery 也可以正确处理回调的问题, 而且也不会去延时200毫秒, 更不会的不停尝试..
就你这些实现的思路, jQuery 已经摔你几万条街了, 居然做人一点都不知道谦虚.
三人行必有我师, tree new bee
对你自己一点好处都没有.
毛主席说过: 做人要低调
.
你在后端输出的时候使用固定的名字,你需要在里面使用参数告诉 jQuery 你后端用的那个名字是什么.
而不是像你代码里写的那样固化成 callback
.
你的问题在于 jsonp 的请求在返回的时候, 不会再次触发 callback. 你自己去试看 jQuery 的那个 jsonp 会不会在请求回来的时候调用 callback.
https://github.com/drduan/minggeJS/issues/222 看贴,MingGeJS PK JQ有图有真相