博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax跨域问题以及解决方案
阅读量:4026 次
发布时间:2019-05-24

本文共 1361 字,大约阅读时间需要 4 分钟。

一、什么是跨域?

跨域就是跨域名或跨端口号进行调用

例如:

www.taotao.com >> www.jd.com                        是跨域

www.taotao.com >> sso.taotao.com                   是跨域

www.taotao.com >> www.taotao.com:8080       是跨域

www.taotao.com >> www.taotao.com                不是跨域

只有请求者和被请求者的域名和端口号完全一致,才不是跨域

二、什么是跨域问题?

js使用Ajax进行跨域请求,无法返回数据(json、xml等)

三、为什么会有跨域问题?

浏览器基于安全考虑,不允许Ajax请求跨域调用数据(json、xml等)

四、使用jsonp解决跨域问题

jsonp核心原理:

js使用Ajax无法跨域调用数据(xml,json等),但是可以跨域调用js数据

js的Ajax请求数据和请求js数据的不同如下图:

 

解决js使用Ajax无法跨域获取数据的方法:

上图,我们可以通过请求js的方式,进行跨域调用。

五、前端jsop实现

查看发起请求的逻辑:

分析发现使用的dataType是jsonp,这里使用的是jsonp技术,这样前端请求,在url后面会拼上callback参数:

六、后台处理jsonp数据

RequestMethod.GET)@ResponseBodypublic ResponseEntity
check(HttpServletRequest request, @PathVariable("param") String param, @PathVariable("type") Integer type) { try { Boolean bool = this.userService.check(param, type); // 1 获取callback参数 String callback = request.getParameter("callback"); // 2. 判断callback是否为空, if (StringUtils.isNotBlank(callback)) { // 如果不为空,表示请示使用的jsonp进行,我们就需要把返回的json数据进行包裹,使用callback String result = callback + "(" + bool + ")"; return ResponseEntity.ok(result); } else { // 如果为空,表示请求不是使用的jsonp,和原来一样,直接返回 return ResponseEntity.ok(bool + ""); } // 200 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // 500 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);}

七、前端接收处理

前端接收到返回的数据后,在处理封装号的js数据,获取其中的json数据。

你可能感兴趣的文章
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>
iOS AFN 3.0版本前后区别 01
查看>>
iOS AFN 3.0版本前后区别 02
查看>>
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
iOS 面试题~RunLoop和线程的关系?runloop的mode作用是什么?
查看>>
iOS 各种demo链接汇总~刷新(第三方控件)
查看>>
iOS tableView~尾部添加控件
查看>>
iOS 各种demo链接汇总~HUD与Toast
查看>>
iOS 各种demo链接汇总~其它UI
查看>>
iOS OS X 和 iOS 中的多线程技术-2 (performSelectors)
查看>>
iOS OS X 和 iOS 中的多线程技术-3 (NSThread)
查看>>
给程序员的忠告(转)
查看>>
从程序员到项目经理
查看>>