js跨域调取数据之jsonp

js跨域调取数据之jsonp

// ajax在前端运用中是非常广泛的, 那么有一点需要注意的就是跨域,意思是跨服务器,跨端口去调取数据,使用正常的ajax是不可以的,  那么就要使用别的方法了,  方法有好几种,常用的就是 jsonp和使用CORS来进行跨域, 下面我为大家提供了一种 jsonp 跨域的方式源码和jsonp跨域的原理,  我们可以通过控制台来看到它调取的数据的方式


//常用的方式有两种   一种是jsonp   一种是  使用CORS跨域

$('.button').click(function(){

        var type=$(this).attr('id');

        $.ajax({

                type:'get',//这种形式  只支持get,  缺点:不安全 ,下面data数据大小不能太大(一般是够用的)

                url:"http://www.zhuyongchun.cn/ajax",  //一般域名这块要以变量的形式写 变量+ajax 

                dataType:'jsonp',  

                data:{'type':type},

                jsonp:'callback',  

                success : function(data){

                        // data=JSON.parse(data);//解析json串 ,这里不需要解析

                        if(data.status==1){

                        var html ='';

                        $.each(data.content, function(infoIndex,info){

                                       html+='<li>'+info['name']+'</li>';

                            })

                                if(type=='add'){

                                        $('.ul').append(html);

                                  }else{

                                        $('.ul').html(html);

                                    }

                        }else{

                                alert(data.status)

                        }

                }

        })

})

//

2.jsonp跨域的原理

我们知道,在页面上有三种资源是可以与页面本身不同源的。它们是:js脚本,css样式文件,图片,像taobao等大型网站,很定会将这些静态资源放入cdn中,然后在页面上连接,如下所示,所以它们是可以链接访问到不同源的资源的。

<xmp>

1)<script type="text/javascript" src="某个cdn地址" ></script>


2)<link type="text/css" rel="stylesheet" href="某个cdn地址" />


3)<img src="某个cdn地址" alt=""/>

</xmp>

而jsonp就是利用了

。当链接的资源到达浏览器时,浏览器会根据他们的类型来采取不同的处理方式,比如,如果是css文件,则会进行对页面 repaint,如果是img 则会将图片渲染出来,如果是script 脚本,则会进行执行,比如我们在页面引入了jquery库,为什么就可以使用 $ 了呢?就是因为 jquery 库被浏览器执行之后,会给全局对象window增加一个属性: $ ,所以我们才能使用 $ 来进行各种处理。(另外为什么要一般要加css放在头部,而js脚本放在body尾部呢,就是为了减少repaint的次数,另外因为js引擎是单线程执行,如果将js脚本放在头部,那么在js引擎在执行js代码时,会造成页面暂停。)