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有图有真相