关于JSONP

借助 script 标签去发送http请求:JSONP

用jsonp去完成一个简单的跨域请求

1、没有改变CORS的页面不能随便跨域
2、为了保证同源策略,ajax也不能跨域请求
3、老一点的浏览器还不支持CORS

要注意的就是所请求的服务器一定要是可信任的服务器,防止别人“接管”你的网站

JSONP有别于JSON ,多了那个P是 “前缀”或者“填充”的意思,{“name”:”steven”,”age”:12} =>callback({“name”:”steven”,”age”:12} );

这里就完成了一个JSONP的小demo

    function handleResponse(res){
        alert(res.city);
    }
    var script = document.createElement("script");
    script.src = "http://freegeoip.net/json?callback=handleResponse";
    document.body.appendChild(script);

下面的英文写的有点坑(借用了犀牛的代码)

/**
     * @param  {string} url
     * @param  {Function} callback 回掉函数
     * @return {[type]}
     */
    function getJSONP(url,callback){

        // create callback function `s name
        var cbnum = 'cb' + getJSONP.counter++;
        var cbname = 'getJSONP.' + cbnum;

        // use code to decoration function name and add too url `s search
        // use jsonp as param name some support json server
        // maybe otherelse param like callback
        if(url.indexOf('?') === -1){
            url += "?callback=" + cbname; // as url search
        }else{
            url += "&callback=" + cbname; // as url param
        }

        // create script element to send request
        var script = document.createElement('script');

        // define perform function
        getJSONP[cbnum] = function(response){
            try{
                callback(response); // deal response
            }
            finally{
                delete getJSONP[cbnum]; //delete this function
                script.parentNode.removeChild(script); // delete this script node
            }
        };

        // trigger http request
        script.src = url;
        document.body.appendChild(script); // add script element to document

    }

    getJSONP.counter = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值