美文网首页
jsonp源码实现

jsonp源码实现

作者: 安逸的蓝鲸 | 来源:发表于2018-07-23 20:04 被阅读0次

jsonp,是常用的跨域请求服务器上资源的方式,因为script标签的src属性不会受同源策略影响,因而可以用src属性实现跨域,src属性是通过url的方式传参,故只能发送get请求

   // 生成查询url参数
    var util = {
        toQueryurl: function(o) {
            var arr = []
            for ( var i in o) {
                arr.push(encodeURIComponent(i)+ '=' +encodeURIComponent(o[i]))
            }
            return arr.join('&')

        }
    }
    
    var url = 'http://toplrcreq.xx.com/lrcreq/list'
    var page = 1
    var data = {
        pg       :   page
    }

    function jsonp(params) {
        var callbackName='json_'+ ~~(Math.random()*100) // 随机生成回调函数名称
        params.data.callback = callbackName //注意
        var script = document.createElement('script');
        var flag = params.url.indexOf('?')>-1?'&':'?'
        var queryUrl = params.url + flag + util.toQueryurl(params.data)
        var head = document.getElementsByTagName('head')[0]
        head.appendChild(script)
        script.src = queryUrl
        //回调函数要接口返回后执行
        window[callbackName] = function(json) {
            window[callbackName] = null
            clearTimeout(script.timer);
            head.removeChild(script)
            params.success && params.success(json)
        }

        //超时处理
        if (params.timer) {
           script.timer = setTimeout(function(){
            window[callbackName] = null
            head.removeChild(script)
            params&&params.error({
                message:'网络超时'
            })
            },params.timer)
        }
    }

    // 调用实现
    jsonp({
        url:url,
        data:data,
        success: function(res) {
            console.log(res)
            if(res.status == 1) {
                console.log('接口响应成功')
            }
            
        },
        error:function(error){
            console.log(error)
        },
        timer:5000})

相关文章

  • jsonp源码实现

    jsonp,是常用的跨域请求服务器上资源的方式,因为script标签的src属性不会受同源策略影响,因而可以用sr...

  • day02-vuejs-vue-resource实现get, p

    vue-resource实现get, post, jsonp]请求: JSONP的实现原理: 由于浏览器的安全性限...

  • JSONP理解和实现

    JSONP的格式 JSONP 不支持 POST的原因 i、因为JSONP是通过创建script实现的 ii、动态创...

  • JSONP的历史方案和实现原理

    1. JSONP的实现原理 JSONP是通过动态创建script实现的。请求方:frank.com 的前端程序员(...

  • 遇到的面试题

    null instanceOf Object false jsonp跨域原理,优缺点,安全性因素 jsonp的实现...

  • 前端跨域请求原理及实践

    一、 跨域请求的含义 2.3 使用 标签原生实现 JSONP 经过上面的事件,你是不是觉得 JSONP 的实现和...

  • 前端跨域请求原理及实践

    一、 跨域请求的含义 2.3 使用 标签原生实现 JSONP 经过上面的事件,你是不是觉得 JSONP 的实现和...

  • 实现跨域的方法

    不同域下的接口获取数据,可以使用jsonp和cors。(ie10以下可以使用jsonp获取数据) jsonp实现跨...

  • ES6解决跨域

    实现一个jsonp函数,仅需要支持jsonp(url)一种调用方式即可(仅有url一个传参),例如: jsonp(...

  • MY-FM,音乐播放器

    项目预览:音乐播放器 项目源码:项目源码 项目技术涉及: ①jsonp,跨域,异步,jQuery②原生js,,jQ...

网友评论

      本文标题:jsonp源码实现

      本文链接:https://www.haomeiwen.com/subject/euxsmftx.html