老师,麻烦看看

来源:3-3 跨域封装(2)

qq_Mr郭生_0

2020-06-17 15:03:00

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>ajax</title>

    <link rel="stylesheet" type="text/css" href="../testproject/css/style.css">

</head>

<body>

    <div class="banner" id="banner"><a href=""></a></div>

    <div class="banner" id="banner_jq"></div>

    <div>

        <img src="http://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png">

    </div>

    <script type="text/javascript" src="js/jquery-3.5.1.js"></script>

    <script type="text/javascript">

        //封装JSONP

        function getJSONP(url,callback){

            if(!url){

                return;

            }

            //声明数组用来随机生成函数名

            var a=['a','b','c','d','e','f','g','i','h','jb'],

                r1=Math.floor(Math.random()*10),    //Math.floor是取整

                r2=Math.floor(Math.random()*10),

                r3=Math.floor(Math.random()*10),

                name='getJSONP'+a[r1]+a[r2]+a[r3],

                cbname='getJSONP.'+name;

                //判断url地址中是否有问好

                if(url.indexOf('?')===-1){

                    url+='?jsonp='+cbname;

                }else{

                    url+='&jsonp='+cbname;

                }

                //动态创建script标签

                var script=document.createElement('script');

                //定义被脚本执行的回调函数

                getJSONP[name]=function(data){

                    try{

                        callback &&callback(data)

                    }catch(e){

                    }finally{

                        //最后删除该函数及script标签

                        delete getJSONP[name];

                        script.parentNode.removeChild(script)

                    }

                }

                //定义script的src

                script.src=url;

                document.getElementsByTagName("head")[0].appendChild(script);

        }

        getJSONP("http://class.imooc.com/api/jsonp",function(data){

            console.log(data)

        });

        </script>

</body>

</html>

这里还有点疑问,当给getJSONP传入url,并且url也拼接'?jsonp='+cbname后,代码里面的哪一部分触发传送这个拼接后的url到服务器,麻烦老师详细讲讲

写回答

2回答

好帮手慕星星

2020-06-17

同学你好,这一部分触发执行

http://img.mukewang.com/climg/5ee9cf2c09d22f8b05930105.jpg

当前跨域就是通过script实现的,这个标签本身可以实现跨域。所以当给script标签添加上url地址,追加到页面的时候就可以触发传送。

祝学习愉快!

0
hq_Mr郭生_0
h 那么接下来这里触发传送到服务器,服务器返回cbname(json),然后执行代码里面定义的函数getJSONP[name]=function(){}吗?我这样理解正确吗?
h020-06-17
共1条回复

好帮手慕星星

2020-06-17

同学你好,理解的没有问题,很棒!

祝学习愉快!

0

0 学习 · 14456 问题

查看课程