jQuery和java后台的jsonp跨域问题
来源:互联网 发布:淘宝店铺一共有多少分 编辑:程序博客网 时间:2024/06/06 04:00
Jsonp原理:
ajax本身是不可以跨域的,通过产生一个script标签来实现跨域。因为script标签的src属性是没有跨域的限制的。其实设置了dataType: ‘jsonp’后,$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。
JSONP是一种脚本注入(Script Injection)行为,所以也有一定的安全隐患。首先在客户端注册一个callback (如:’jsoncallback’), 然后把callback的名字(如:jsonp1236827957501)传给服务器。注意:服务端得到callback的数值后,要用jsonp1236827957501(……)把将要输出的json内容包括起来,此时,服务器生成 json 数据才能被客户端正确接收。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 ‘jsoncallback’的值 jsonp1236827957501 .
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数,
传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里.(动态执行回调函数)
可以说jsonp的方式原理上和是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的) .
页面中js为:
$.ajax({ url: "http://" + ipPort + "/user/getUser", type: 'GET', dataType: 'jsonp', jsonp: 'callback', success: function (data) { alert('success:'+data); }, fail: function () { alert('fail'); }});
java后台中的代码为:
/** * 直接输出.处理jsonp返回的数据 */public static void printJsonData(String text){ PrintWriter print; try { HttpServletRequest request = ThreadContextHolder.getHttpRequest(); HttpServletResponse response = ThreadContextHolder.getHttpResponse(); response.setContentType("text/html;charset=utf-8"); print=response.getWriter(); String jsonp=request.getParameter("callback");//callback为回调函数名,要和js名保持一致 if(jsonp!=null){ text=jsonp+"({\"data\":"+text+","+"\"token\":\""+StringUtil.token()+"\"})"; }else{ text="{\"data\":"+text+","+"\"token\":\""+StringUtil.token()+"\"}"; } print.write(text); print.close(); } catch (IOException e) { System.err.println(e.getMessage()); }}
- jQuery和java后台的jsonp跨域问题
- JQuery解决jsonp问题,后台采用java
- 谈谈json和jsonp和jsonp的跨域问题。
- jQuery+ajax+jsonp+Java跨域访问原理和实例
- 如何使用jQuery的jsonp解决跨域问题
- jquery使用jsonp解决json跨域访问的问题
- Java jsonp跨域问题
- jquery使用jsonp跨域请求问题
- Java+jquery+jsonp实现跨域
- jsonp和java联合使用解决跨域问题
- 关于AJAX和JSONP的跨域问题和原理
- jQuery的AJAX和JSONP
- jQuery中jsonp的跨域注意
- jQuery-jquery+ajax+jsonp+java跨域请求方案
- 使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup
- 使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup
- 使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup
- 使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup
- apk反编译smali调试
- lmdb 安装
- iOS网络判断
- CF 2C Commentator problem
- MSCNN 论文解析(A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection
- jQuery和java后台的jsonp跨域问题
- PullToRefresh实现下拉刷新和上拉加载
- 关于mybatis+mysql批量插入的问题
- 字符串搜索命令 grep
- Swager+Spring请求接口常见错误码
- 【今晚八点云课堂直播分享】构建一站式视频云点播加速平台实践
- 使用CIFilter 为照片添加各种滤镜效果
- 详解Java中的clone方法
- 手机cached free memory(剩余内存)计算方法