Ajax.md
文章目录
第一章-简介
1什么是AJAX
Asynchronous JavaScript and XML(异步的JavaScript和xml) 一种不用重新加载整个页面,就能更新部分网页 产品链条:H5+网页+客户端+手机端(Android、IOS)+小程序 AJAX核心是XMLHttpRequest,只是对它进行了封装 通过AJXJ可以使用HTTPGet和HTTPPost从远程服务器请求文本、HTML、XML等
用Response返回
直接返回:
|
|
返回json数据
|
|
2json格式
介绍:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 规则:JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。 构造符号: [{"":"”,"":""}] []表示数组,{}表示对象,分号:分割键值对,逗号,分割对象 JSON是一个序列化的对象或数组。
js对象和json对象转换:
|
|
第二章-跨域问题
1什么是跨域问题
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对 JavaScript施加的安全限制。
2.什么是同源?
所谓同源是指,域名,协议,端口均相同 ●http://www.qf.com/ -> http://admin.qf.com/跨域 ●http://www.qf.com/ -> http://www.qf.com/非跨域 ●http://www.qf.com/ -> http://www.qf.com:8080/跨域 ●http://www.qf.com/ -> https://www.qf.com/跨域
3.如何解决跨域问题?
1使用CORS (跨资源共享)解决跨域问题 CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏 览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE 浏览器不能低于 IE10。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS 通信与同源的AJAX通信没有差别,代码完全一样。浏览器一-旦发现 AJAX请求跨源,就会自动 添加一-些附加的头信息,有时还会多出一-次附加的请求,但用户不会有感觉。因此,实现CORS 通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信(在header 中设 置: (“Access-Control-Allow-Origin”, “*")
response 添加 header
我们在 Servlet 请求返回时添加如下代码: //表示支持所有网站访问,也可以额外配置相应网站 resp.setHeader(“Access-Control-Allow-Origin”, “*");
2SpringMVC解决
Spring MVC 从4.2版本开始增加了对CORS的支持,在spring MVC 中增加CORS支持非常简单,可以配置全局的规则,也可以使用@CrossOrigin
注解进行细粒度的配置。
使用@CrossOrigin
注解,先通过源码看看该注解支持的属性:
1.1在Controller上使用@CrossOrigin
注解
@CrossOrigin(origins = “*”, maxAge = 3600) @CrossOrigin(“http://domain2.com”)也可以用在方法上,用在Controller和方法上,会两者结合。
1.2用xml方式解决
|
|
JSONP解决
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外。利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP。用 JSONP 抓到的资料并不是 JSON,而是任意的JavaScript,用 JavaScript 直译器执行而不是用 JSON 解析器解析(需要目标服务器配合一个callback函数)。
相对于Springmvc的cors来说,JSONP只支持get请求,对老浏览器的支持比较好。
第三章-应用场景
Strtut2中使用
strtus2中使用还可以使用最为简单的,reponse直接返回请求。
1加入依赖,注意版本。
|
|
2Action中
|
|
3struts.xml中
注意:extends="json-default"修改继承的拦截器(此拦截器默认继承了struts-default)
type为json,jsonMapname为root,jsonMap是aciton中集合名
|
|
文章作者 卢森林
上次更新 2020-07-18