minggeJS icon indicating copy to clipboard operation
minggeJS copied to clipboard

接着打脸 1.7.3 jsonp 当已存在callback且被调用的时候, jsonp 的回调函数不会执行

Open xqin opened this issue 9 years ago • 8 comments

<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 的吧.

xqin avatar Dec 17 '15 14:12 xqin

<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 中的那个.

xqin avatar Dec 17 '15 15:12 xqin

当然没有, 不信你自己试, 同样的代码, 你引入 jQuery 结果就是正确的.

xqin avatar Dec 17 '15 15:12 xqin

不过, 但你觉得你这样做了之后, 你当初所吹的性能超过 jQuerynew bee, 不就实现不了吗?

而且你换成 iframe 之后,也不一定就能解决你的问题.

xqin avatar Dec 17 '15 16:12 xqin

你不是对 jQuery 的底层 了如指掌吗? 怎么现在才知道应该用随机?

xqin avatar Dec 18 '15 13:12 xqin

即使名字是固定的, jQuery 也可以正确处理回调的问题, 而且也不会去延时200毫秒, 更不会的不停尝试..

就你这些实现的思路, jQuery 已经摔你几万条街了, 居然做人一点都不知道谦虚.

三人行必有我师, tree new bee 对你自己一点好处都没有.

毛主席说过: 做人要低调.

xqin avatar Dec 18 '15 14:12 xqin

你在后端输出的时候使用固定的名字,你需要在里面使用参数告诉 jQuery 你后端用的那个名字是什么.

而不是像你代码里写的那样固化成 callback .

xqin avatar Dec 18 '15 14:12 xqin

你的问题在于 jsonp 的请求在返回的时候, 不会再次触发 callback. 你自己去试看 jQuery 的那个 jsonp 会不会在请求回来的时候调用 callback.

xqin avatar Dec 18 '15 14:12 xqin

https://github.com/drduan/minggeJS/issues/222 看贴,MingGeJS PK JQ有图有真相

mingge8888 avatar Feb 24 '16 23:02 mingge8888