JavaScript中的跨域问题

  跨域问题其实很广泛的存在的,如何解决跨域问题呢,跨域问题究竟是怎么产生的,解决方法的由来又是什么?我以为看了视频讲解,值得写下来,记录下来。ajax

1、跨域问题是怎么产生?spring

概念:只要协议、域名、端口有任何一个不一样,都被看成是不一样的域。json

浏览器对ajax请求的限制,不容许跨域请求资源。后端

http://www.a.com →http://www.b.com 是跨域api

http://www.a.com→ http://www.a.com:8080 是跨域跨域

http://a.a.com →http://b.a.com 是跨域浏览器

http://www.a.com →http://www.a.com/api 不是app

解决方案:---jsonpjsp

2、跨域问题的底层是怎么回事?(推导一下)函数

一、编写json.jsp(后台系统)

二、在后台系统中编写test-json.htm

三、将test-json.htm 拷贝到前台系统进行测试

发现:

一、  alert($) 能够正常弹出

二、  alert(data.abc) 不可以正常的弹出,出现跨域问题

结论:script标签的src能够跨域请求资源,可是ajax请求不能够跨域请求。

疑问:可否借助script标签的src进行加载数据?  --能够的。

四、借助script的src跨域加载资源

发现:

请求资源能够正常请求,可是,报js解析出错。

缘由:

Script标签加载到资源后,会将资源当作是js脚本解析,可是咱们返回的是json数据,因此致使解析失败。

解决:只须要返回js脚本便可。

五、后端系统返回JS脚本

测试:

发现:

返回的js脚本成功解析,可是,fun没有定义。

解决:定义个一个fun方法便可。

六、定义fun方法

测试:

总结:

Jsonp的原理:

一、  jsonp经过script标签的src能够跨域请求的特性,加载资源

二、  将加载的资源(经过一个方法名将数据进行包裹)当作是js脚本解析

三、  定义一个回调函数,获取传入的数据

七、优化

将回调函数名传递到服务端,返回:

调用方:

八、经过jQuery使用jsonp请求

3、解决项目中跨域问题的方案是什么?

一、后台系统Controller

二、测试

问题解决,可是带来了新问题,乱码问题。

三、解决乱码问题

3.1 乱码产生的缘由

在SpringMVC中产生的响应有2类:

(1) ModelAndView

(2)返回数据响应:使用消息转化器完成

找到这个类:StringHttpMessageConverter.class

默认使用的字符串消息转换器:发现,默认使用ISO-8859-1,因此会产生乱码。

 

3.2 解决乱码

四、统一支持jsonp

(1) 扩展CallbackMappingJackson2HttpMessageConverter

(2)配置

(3)Controller实现

总结:经过这个学习,知道了乱码问题的另外一个缘由以及解决方案,原来注解驱动也是能够配置的,看来是本身对springMVC的理解只是存在于表面上,spring的配置文件真的很强大,能很好的解决代码耦合度太高的问题,还可以很好的优化代码,之后这方面真的须要深刻的学习,经过视频中项目的讲解,差很少可以把一些线程池,链接池的代码转换成spring的配置文件,你须要更加深刻的学习。

相关文章
相关标签/搜索