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

本贴最后更新于 3988 天前,其中的信息可能已经水流花落

(一)场景

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

(二)json和jsonp

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

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

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

从红色的地方可以看出,两个名字要一直,不过一般采用callback然后后面加一个“?”此时jquery会自动生成一个函数名,这样可以做到发送很多请求的时候,并不会互相影响。

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

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',

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

在这里附一个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;
}

 

  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 722 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1327 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...