个人博客:打开链接

1 什么是跨域

Js为了安全有一个限制,不允许跨域访问。
1、如果两个url的域名不同
2、Url相同,端口不同也是跨域
3、Ip不同也是跨域

2 解决跨域的问题

可以使用jsonp解决跨域的问题。
1、在js中不能跨域请求数据,js可以跨域请求js片段。
2、可以把数据包装成js片段。可以把数据使用js方法来包装,形成一条方法的调用语句。
3、可以使用ajax请求js片段,当js判断到达浏览器会被立即执行。
4、在浏览器端,先创建好回调方法,在回调方法中通过参数可以获得请求的数据。
前期准备:
1、需要把js的回调方法先写好。
2、做ajax请求时,需要把回调方法的方法名传递给服务端。
3、服务端接收回调方法名,把数据包装好,响应给客户端。

3 跨域请求Controller实现

响应一个json数据。判断callback参数是否为空,如果为空正常返回json数据,如果不为空,支持jsonp调用。
需要使用@ResponseBody注解。

支持jsonp两种方式:
第一种:直接响应字符串

@Controller
@RequestMapping("/item/cat")
public class ItemCatController {@Autowiredprivate ItemCatService itemCatService;@RequestMapping(value="/list",produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")@ResponseBodypublic String getItemCatList(String callback) {ItemCatResult result = itemCatService.getItemCatList();if (StringUtils.isBlank(callback)) {//需要把result转换成字符串String json = JsonUtils.objectToJson(result);return json;}//如果字符串不为空,需要支持jsonp调用//需要把result转换成字符串String json = JsonUtils.objectToJson(result);return callback + "(" + json + ");";}}

第二种方法:
要求springmvc必须是4.1以上版本。
MappingJacksonValue

//第二种方法@RequestMapping(value="/list")@ResponseBodypublic Object getItemCatList(String callback) {ItemCatResult result = itemCatService.getItemCatList();if (StringUtils.isBlank(callback)) {//需要把result转换成字符串return result;}//如果字符串不为空,需要支持jsonp调用MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);mappingJacksonValue.setJsonpFunction(callback);return mappingJacksonValue;}

4 js中处理

JavaScript跨域请求相关推荐

  1. arcgis api for JavaScript _跨域请求

    arcgis api for JavaScript  中出现跨域请求是常见问题, 通常出现类似如下错误消息类似: XMLHttpRequest cannot load http://10.32.2.7 ...

  2. ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践

    解决跨域调用服务并设置headers 主要的解决方法需要通过服务器端设置响应头.正确响应options请求,正确设置 JavaScript端需要设置的headers信息 方能实现. 此处手札 供后人参 ...

  3. jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求

    推荐一个读者做的不错的编程学习网站: 网站:潜安 域名:http://www.qianani.com 另外将会不定期推送近期网站用到的一些技术,讲一些核心原理,今天为第一篇 问题由来: 最近一直在优化 ...

  4. JavaScript跨域总结与解决办法

    JavaScript跨域总结与解决办法 什么是跨域 1.document.domain+iframe的设置 2.动态创建script 3.利用iframe和location.hash 4.window ...

  5. 关于ajax跨域请求(cross Domain)

    Cross Domain AJAX主要就是A.com网站的页面发出一个XMLHttpRequest,这个Request的url是B.com,这样的请求是被禁止的,浏览器处于安全考虑不允许进行跨域访问, ...

  6. AJAX 跨域请求 - JSONP获取JSON数据

    Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...

  7. 浏览器同源策略以及跨域请求时可能遇到的问题

    跨域请求基础知识 浏览器的同源策略 浏览器的源指的是 协议://域名:端口 这样的URL组合.我们首先要明确几点 www.foo.com 和 foo.com 是不同域 www.foo.com 和 ww ...

  8. 循序渐进Python3(十一) --6--  Ajax 实现跨域请求 jsonp 和 cors

    Ajax操作如何实现跨域请求? Ajax (XMLHttpRequest)请求受到同源策略的限制. Ajax通过XMLHttpRequest能够与远程的服务器进行信息交互,另外XMLHttpReque ...

  9. JSONP实现Ajax跨域请求

    前言 由于浏览器存在同源策略的机制,所谓同源策略就是阻止从一个源(域名,包括同一个根域名下的不同二级域名)加载的文档或者脚本获取/或者设置另一个源加载的文档属性. 但比较特别的是:由于同源策略是浏览器 ...

  10. 前端跨域请求get_HTTP--跨域真的有这么难吗

    前言 以前写前端小项目的时候就听说过跨域这个词,什么 JSONP啊,CORS啊.感觉很高级,但是无奈项目太小没机会用上.今天就写篇博客总结一下常用的跨域操作. 为什么要跨域 一般来说写项目的时候都是自 ...

最新文章

  1. iOS 储存用户信息设置封装 直接调用即可(部分是代码片段)
  2. comsol 多物理场仿真流程-以开关柜为例
  3. ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...
  4. java checker_java 英文单词纠正校验框架(Word Checker)
  5. zw版【转发·台湾nvp系列Delphi例程】HALCON HistoToThresh1
  6. C语言程序打印命令,跪求C语言程序读ID3v1信息从mp3文件并打印出来。 1)使用命令行输入一个MP3档案名称。 2)判断档案名称的分...
  7. 关于BMZCTF hitcon_2017_ssrfme的解法
  8. Select2异步ajax方式加载数据
  9. 【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
  10. 【Try to Hack】masscan
  11. python简易双人五子棋
  12. 【ZYNQ】从入门到秃头10 DDS增强版实验ADDA测试(基于ALINX 7020 AN108)
  13. 利用matlab构建自己的colormap(色彩搭配)
  14. 用html制作三角形九九乘法表,用js实现打印九九乘法表
  15. 【AI简报20210716期】上海张江又一款AI芯发布、寒武纪切入自动驾驶芯片
  16. 心法利器[78] | 端到端任务的拆解设计
  17. 【目标流畅阅读文献_语法篇】1.3简单句_动词时态
  18. 头部ct能检查出什么_脑部ct能检查出什么
  19. 如何做到两台电脑网线直连
  20. idea的项目模板的创建

热门文章

  1. mac上php的集成环境
  2. Cholesky分解及一个例子
  3. SOP封装和SOIC封装的区别
  4. 以四小龙为首的CV企业占比七成,安防AI化已成产业趋势
  5. 三菱plc控制电动推杆
  6. linux程序开发ide,LiteIDE 开发工具指南 (Go语言开发工具)
  7. 基于ArcGIS 的GPS数据地图匹配
  8. STM32F103入门 | 2.STM32F103xx内部资源介绍
  9. VS插件AnkhSVN的安装,设置和使用
  10. 易语言解压服务器中压缩包,易语言取压缩包中的文件列表源码