JavaScript - 原生Jsonp及封装

前言:

本文是建立在了解jsonp的基础上的,不了解jsonp的小伙伴可以先百度哦。使用Vue的小伙伴想用jsonp可以看看我之前写的文章 传送门

原生jsonp封装思路:
  • 随机生成callback名
  • 动态生成script
  • 根据传入的params对象拼接字符串,得到完整的url
  • 把url赋给生成的script,同时把script挂载到页面上
  • 通过window属性的方法获取jsonp结果,调用success回调函数
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <script>
            function jsonp({url,params={},success}){
                // 根据时间戳生成一个callback名
                let callbackName = `jsonp_${new Date().getTime()}`;

                // 创建script
                let script = document.createElement('script');

                // 字符串拼接生成基本url
                let baseUrl = `${url}?callback=${callbackName}`;

                // 取出params对象属性并得到完整url
                for(let item in params){
                    baseUrl += `&${item}=${params[item]}`;
                }

                // jsonp核心,通过script的跨域特性发出请求
                script.src = baseUrl;

                // 把创建的script挂载到DOM
                document.body.appendChild(script);

                // 给window添加属性,用于获取jsonp结果
                window[callbackName] = (res)=>{
                    // 执行success回调
                    success(res);
                    // 删除window下属性
                    delete window[callbackName];
                    // 得到结果后删除创建的script
                    document.body.removeChild(script);
                }

            }
            jsonp({
                url:'http://192.168.191.1:8000/bookIfoTotal',
                params:{
                    name:'tom',
                    age:21
                },
                success(res){
                    console.log(res);
                }
            })
        </script>
    </body>
</html>

总结:jsonp作为跨域的一种方法还是比较简单实用的,虽然只支持get方式,但是用于查询数据已经足够了。

附上测试结果:


jsonp
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 同源策略 浏览器对不同源的脚本或者文本的访问方式进行的限制,就是一种浏览器的安全机制。 同源:相同的协议、域名、端...
    Mr无愧于心阅读 1,046评论 0 1
  • ajax是什么: ajax简单的说就是做数据交互使用的。 Ajax的原理简单来说通过XmlHttpRequest对...
    liudai123阅读 458评论 0 0
  • Ajax 模块也是经常会用到的模块,Ajax 模块中包含了 jsonp 的现实,和 XMLHttpRequest ...
    对角另一面阅读 666评论 0 1
  • JSONP的诞生 1.首先,因为ajax无法跨域,然后开发者就有所思考 2.其次,开发者发现,script标签的s...
    heachou阅读 548评论 0 0
  • 人先天皆有不足,唯有后天多爱自己! 单纯延长睡眠时间是不能缓解疲劳改善精力的,甚至对身体有坏处。 伤脾气。久卧会伤...
    后爱书杭阅读 431评论 1 0

友情链接更多精彩内容