JAVA中jsonp的学习

学习ajax中jsonp的时候,老师代码使用php写的,于是我在网上找了一下java的jsonp资料,现总结如下:

1. 什么是jsonp?

一般来讲,我们在一个域名的网页上不能直接调用其他域名的资源,即不能跨域。但是页面中的<script>标签是个例外,因为这个标签并没有遵守同源策略,因此,我们可以借助这个标签来实现跨域,而通过这个方法从其他域名获取json数据,这样的模式或者方法就叫做jsonp(json padding),也就是说jsonp是一种协议

jsonp可以向服务器传递一个参数名(自定义的),服务器端在返回数据时,会将json数据传到这个参数中,并用括号将json数据包裹起来,这样,客户端就获得了服务器端传来的json数据并进行处理。

String callback = request.getPArameter("callbaack");
response.getWriter().write(callback + "(" + jsonData + ")");


2. jQuery封装的Ajax中的jsonp

在jQuery封装好的Ajax中,使用jsonp需要如下定义:

$.ajax({
	type : "GET",
	url : "QueryServlet?queryid=" + $("#queryid").val(),
	dataType : "jsonp",
	jsonp:"callback",
	success : function(data) {
		if (data.seccess) {
			$("#searchResult").html(data.msg);
		} else {
			$("#searchResult").html("出现错误:" + data.msg);
		}
	},
	error : function(jqXHR) {
		alert('发生错误:' + jqXHR.status);
	}
});
我们需要将dataType设置为"jsonp",还可以通过jsonp参数设置传到服务器的参数名称,这个参数用于帮助服务器获取jsonp的回调函数名称,如果不设置jsonp参数,参数名称默认为"callback";此外,还可以通过jsonpCallback参数自定义jsonp的回调函数名称,默认为jQuery生成的随机函数名。


3. JSONP的执行过程

在客户端配置好参数之后(如:jsonp:callback),客户端会将callback的名字传递给服务器,服务器端在接受到请求之后,通过获取刚刚设置的参数名可以得到回调函数的名称,然后用callback(jsondata)这样的格式,将json数据包裹起来,然后将以javascript的语法生成一个function,function的名字就是设置的回调函数的名称,json数据将直接以入参的形式放入到function中,并传送给客户端。

客户端在收到数据之后,将解析得到的js文档,将获取到的数据传入到success定义好的函数中,接着处理数据。


参考:https://segmentfault.com/a/1190000006228298


--------------------------------------------------------------------------------------

补充:jsonp只支持GET请求,而不支持POST请求,这是它的局限性。

  这是由于jsonp是通过生成一段script实现的,而script标签中的src获取资源的方式是GET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值