JSON和JSONP的区别,以及使用方法

(一)场景

在拉京东城市选择的基础数据时候,遇到被服务器拒绝的状况,也就是ajax跨域问题javascript

(二)json和jsonp

说的直白一点,在咱们作ajax异步的一些功能的时候,必定会或多或少的遇到两个问题,(一、数据的交换。二、跨域问题)java

JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。咱们在用其余关于src的标签的时候,均可以跨域。因此咱们只要动态构造的src标签一样能够作到跨域。jquery

<script type="text/javascript">
function <span style="color: #ff0000;">jsonpCallback</span>(result)  
            {  
            alert(result.msg);  
            }
   </script>
<script type="text/javascript" src="http://crossdomain.com/jsonServerResponse?jsonp=<span style="color: #ff0000;">jsonpCallback</span>"></script>

从红色的地方能够看出,两个名字要一直,不过通常采用callback而后后面加一个“?”此时jquery会自动生成一个函数名,这样能够作到发送不少请求的时候,并不会互相影响。ajax

同源策略 :即JavaScript只能访问与包含它的文档在同一域下的内容。json

jsonp能够跨越同源策略,当咱们使用了jsonp,将会是另一种协议通讯了。跨域

JSONP的优势是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中均可以运行,不须要XMLHttpRequest或ActiveX的支持;而且在请求完毕后能够经过调用callback的方式回传结果。浏览器

JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种状况,不能解决不一样域的两个页面之间如何进行JavaScript调用的问题。服务器

(三)使用方法

$.getJSON("http://跨域的dns/document!searchJSONResult.action?name1="+value1+"&jsoncallback=?", 
    function(json){ 
    if(json.属性名==值){ 
        // 执行代码 
    } 
});
$.ajax({
    async:false,
    url: http://跨域的dns/document!searchJSONResult.action,
    type: "GET",
    dataType: 'jsonp',

一般状况通常是这两种使用方法,在跨域问题上,很是简单。dom

在这里附一个json的处理方法异步

public static Object[] getDTOArray(String jsonString, Class<?> clazz){
net.sf.json.JSONArray array = net.sf.json.JSONArray.fromObject(jsonString);
Object[] obj = new Object[array.size()];
for(int i = 0; i < array.size(); i++){
net.sf.json.JSONObject jsonObject = array.getJSONObject(i);
obj[i] = net.sf.json.JSONObject.toBean(jsonObject, clazz);
}
return obj;
}
相关文章
相关标签/搜索