jQuery jsonp跨域请求数据 的封装(渡一)

@渡一教育 2019 4 21

浏览器的同源策略:限制从一个源加载的文档或脚本与来自另一个源的资源进互。同源策略:协议 域名 端口号 相对于两个页面是相同的 则为同源 ,否则就为非同源 —浏览器提出安全策略

我们一般通过 js 发起jsonp的跨域请求对请求的数据进行处理,或者把自己的请求的数据发送到后台 后台处理之后的数据返给前端

jquery 的 jsonp 如何发起跨域请求及其原理:
ajax: async javaScript and xml (异步加载js和xml) 是一种快速创建动态网页的技术
ajax请求的限制:同源策略

我们先思考一个问题 :我们在外部引入jquery 是通过这种方式

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>

实际上这里用到了jsonp的跨域请求方式 ,我们再来理解一下 这种方式

 <script src="./index.txt?cb=callback"> </script>
```这块代码是们在另一个文件中创建的txt文件(可以是excel、word等格式)

 <script src="./index.txt?cb=callback">
        //  实际上index.txt中的文本会被放在在这里来当作js语句来解析
        callback({
            wd: '渡一',
            age: 123456
        })   **//这里callback就是index.txt中的文本**
    </script>



      // 我们来封装jsonp函数
        function jsonp(obj) {
            var oScript = document.createElement('script');                      // 动态创建script标签
            var dataStr = '';                                                  // 地址中拼接的要传给后端的数据  (字符串)
            if (typeof obj.data == 'object') {                                // 如果传入进来的数据是对象的格式 那么需要拼接这个对象的每一项
                for (var prop in obj.data) {
                    dataStr += prop + '=' + obj.data[prop] + '&';
                }
            } else {
                dataStr = data;                                             // 如果传进来的是字符串  直接赋值就好
            }
            // 判断页面上是否有回调函数, 如果没有  则需要创建一个函数
            window[obj.jsonpCallback] ? "" : window[obj.jsonpCallback] = function (res) { 
            // 如果页面里面没有回调函数  则看看传入的对象里面有没有成功的回调函数,若有则执行 没有则打印数据
                obj.success ? obj.success(res) : console.log(res);
            }
            oScript.src = obj.url + '?' + dataStr;                            // 为script添加地址   
            document.body.appendChild(oScript);                             // 将script标签插入到页面中
            document.body.removeChild(oScript);                        // 每次插入完script标签就会执行里面的script代码  然后删除标签  为了使页面里面的标签不那么多
        }
        jsonp({
            url: './index.txt',
            //  url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
            data: {
                wd: '渡一'
            },
            jsonpCallback: 'callback',  // 回调函数 如果有回调函数就在./index.txt 中执行回调
            jsonp: 'cb',
            success: function (res) {
                console.log(res);
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值