JavaScript原生实现JSONP跨域

同源策略:浏览器为了保证请求之间的安全性,提出了同源策略,即协议、域名、端口都相同时才满足同源策略。

如果两个网页是不同源的就会出现跨域现象。JSOPN是出现最早的跨域方法,其特点是简单、兼容性不错,缺点是只支持get方法、不安全、不能很好的处理发现和处理错误。

function jsonp(url, param, callback){
    //处理url地址,没有加入一个?,有加入&
    let queryString = url.indexOf('?') == -1 ? '?' : '&'
    //处理参数{xx:xx}
    for(let k in param){
        queryString += k + '=' + param[k] + '&'
    }
    //处理回调
    let random = Math.random().toString().replace('.', '')
    let callname = 'myjsonp' + random
    let cb = 'callback=' + callname
    queryString += cb
    
    //创建一个script标签,并加入src属性
    let script = document.createElement('script')
    script.src = url + queryString
    
    //把回调函数的名字赋给window
    window[callname] = funciton(param){
        callback(param)
        document.body.removeChild(script)
    }
    docuemnt.body.appendChild(script) 
}

 

posted @ 2021-03-20 14:29  xiaoxu1024  阅读(57)  评论(0)    收藏  举报