什么是jsonp?【ajax跨域的解决方案】

Web2.0时代大家都用ajax,ajax取数据前一段时间大家都用xml,后来大家发现了一种更好的,更有效,也更小的表达数据的方式这就是jason,jason是利用javascript的特性来表示变量值的方法,例如:

var site = {name:'宝宝孕历',url:'http://www.baobaoyunli.com/'};


这个相信多数人都知道jason,但是什么是jsonp呢?


出现jsonp也和ajax有关系,因为ajax有一个缺陷(这个缺陷是为用户电脑安全考虑的),就是不能跨域取数据,例如我在 www.baobaoyunli.com不可以用ajax请求abc.baobaoyunli.com的数据,如果请求浏览器会报错。怎么办这是个问题,于是jsonp应运而生了,换句话说,jsonp是为了解决ajax不能跨域的问题才出现的,jsonp可以解决浏览器跨域问题。


jsonp如何解决跨域问题呢?通过欺骗浏览器,让浏览器通过不验证是否在同一个域的方式,获得jason数据,如何做,其实很简单,请看示例:


在需要跨域调用ajax的页面上有如下代码

function callAfterGetData(){
//do something
}




在abc.baobaoyunli.com/data.jason中输出的内容示例:

var site = {name:'宝宝孕历',url:'http://www.baobaoyunli.com/'};
callAterGetData();

data.jason中的内容分两部分,一部分是ajax要取的jason内容,另外一部分是取完数据之后的处理方法调用。


这样就从另外一个方面解决了ajax不能跨域的问题。但是这种方法是有一定缺陷的,用过ajax的人都知道,在ajax请求时readyState改变会引发事件,告诉我们ajax调用成功了还是出错了。但是用jsonp这个方法就没有这种状态,如果出错了没办法发出出错通知。

你可能感兴趣的:(JavaScript,jsonp,Ajax,浏览器,idea)