JAVA中jsonp的学习

来源:互联网 发布:如何走出失恋 知乎 编辑:程序博客网 时间:2024/05/16 11:57

学习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

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 呢排 排对 排了 排会 一排什么 排黑尔丁 排例五500期走势图 喝香油五分钟就排便 排例五基本走势图 排例五走势图带连线 排到五走势图 五排一图 排烈五走势图 排利五 五里排 五关 排力五走势图 站七坐五盘三半 一排排 一排排什么 排便是绿色的怎么回事 主人控制排便 排便 一天排便几次正常 正常人一天排便几次 日本排便网站 吃什么水果排便通畅 吃什么可以排便通畅 有助于排便的食物 吃什么能排便 吃什么水果排便 如何快速通便 利于排便的食物 快速排便的小妙招 便秘排便困难 老人排便困难 婴儿排便困难 胃胀排便困难 产后排便困难 突然排便困难 大便干排便困难