浏览器跨域的解决方案
来源:互联网 发布:吴德周 知乎 编辑:程序博客网 时间:2024/05/20 05:26
原理很多博客写的很详细,这里只提供解决代码
解决方案
1,jsonp JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。其实是用回调的思想解决跨域的问题 JSONP只支持GET请求 贴前端代码
<!DOCTYPE HTML><html><head><script type="text/javascript" src="jquery-1.8.2.min.js"></script><script type="text/javascript"> $(function(){ //按钮单击时执行 $("#testAjax").click(function(){ //Ajax调用处理 $.ajax({ type: "get", url: "http://localhost:8080/springmvc_maven_demo/hii2",//路径根据自己的 success: function(data,textStatus){ console.log(data) alert(textStatus); }, dataType : 'jsonp',**//重点** jsonpCallback:"cb",**//重点** }); }); });</script> </head> <body> <div id="myDiv"><h2>通过 AJAX 改变文本</h2></div> <button id="testAjax" type="button">Ajax改变内容</button> </body></html>
后端代码
@RequestMapping(value="/hii2",method = RequestMethod.GET) public String handleRequest2(HttpServletRequest req, HttpServletResponse resp) { BaseResponse baseResponse = new BaseResponse();// JSONObject object = new JSONObject();// object.put("one","hiworld"); Map<String,Object> object = new HashMap<String, Object>(); object.put("one","规划"); baseResponse.setSuccess(true); baseResponse.setContent(object); String jsonp="cb("+ JSONObject.toJSONString(baseResponse)+")";**//重点** return jsonp; }
2,response.setHeader("Access-Control-Allow-Origin","*");
其实就是在过滤器中添加 response.setHeader(“Access-Control-Allow-Origin”,”*”),实现方式可以自定义一个filter,加载web.xml中
这种方式支持get,post
<filter> <filter-name>filterTest</filter-name> <filter-class>com.filter.FilterTest</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>filterTest</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
filter代码
public class FilterTest implements Filter{//省略 @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("过滤器进行中"); // TODO Auto-generated method stub HttpServletRequest hRequest=(HttpServletRequest)request; HttpServletResponse hResponse=(HttpServletResponse)response; //Conditionally select and set the character encoding to be used if(ignore || hRequest.getCharacterEncoding()==null){ String coding=selectEncoding(hRequest); if(coding!=null){ hRequest.setAttribute("","*"); hRequest.setCharacterEncoding(coding); hResponse.setCharacterEncoding(coding); hResponse.setHeader("Access-Control-Allow-Origin","*");//**重点** } } //将控制器传向下一个filter chain.doFilter(hRequest, hResponse); }//省略}
前端代码:
<!DOCTYPE HTML><html><head><script type="text/javascript" src="jquery-1.8.2.min.js"></script><script type="text/javascript"> $(function(){ //按钮单击时执行 $("#testAjax").click(function(){ //Ajax调用处理 $.ajax({ type: "post",//或者get url: "http://localhost:8080/springmvc_maven_demo/hii3", success: function(data,textStatus){ console.log(data) alert(textStatus); }, dataType : 'json', }); }); });</script> </head> <body> <div id="myDiv"><h2>通过 AJAX 改变文本</h2></div> <button id="testAjax" type="button">Ajax改变内容</button> </body></html>
阅读全文
0 0
- 浏览器跨域的解决方案
- 浏览器的跨域问题以及解决方案
- 浏览器的跨域问题以及解决方案
- 浏览器的跨域问题以及解决方案
- 浏览器的跨域问题以及解决方案
- 浏览器的跨域问题以及解决方案
- 浏览器跨域访问解决方案
- 跨浏览器的本地存储解决方案
- 跨浏览器的CSS渐变解决方案
- js检测按键的跨浏览器解决方案
- 浏览器的兼容性问题解决方案
- 浏览器兼容问题的解决方案
- 浏览器兼容性问题的解决方案
- 兼容浏览器的解决方案
- WebAPI——浏览器跨域解决方案
- 浏览器收藏恢复的解决方案
- 浏览器的兼容问题及解决方案
- placeholder兼容浏览器的解决方案
- 矩阵快速幂
- faster-rcnn-demo
- 生成1~n的排列
- 小述系列最终篇:说说《大道至易:实践者的思想》
- Python3之生成器
- 浏览器跨域的解决方案
- 单链表 实现Java栈的理解
- 简单SqlHelper
- 自定义Animation
- adb 常用命令
- 菜鸟的第三篇日志
- UVA 1586 Molar mass
- Spring-AOP和事务实践(注解方式
- scrapy安装及PyCharm的scrapy配置