WEB前端 - Ajax
2021-02-20 13:17
标签:source 获取数据 header 执行 参数 boot 调用 获取 request 【Ajax】 【同步与异步】 【底层实现:XMLHttpRequest-JavaScript提供的API中的对象】 【ajax跨域请求】!!! (1) 什么是跨域请求; (2) jQuery-ajax实现跨域 【新:背景】 【springboot设置跨域请求支持】 WEB前端 - Ajax 标签:source 获取数据 header 执行 参数 boot 调用 获取 request 原文地址:https://www.cnblogs.com/floakss/p/12918322.html同步交互:请求的返回的数据会覆盖之前的数据
异步交互:页面不刷新,页面的部分地方刷新,页面的额部分地方就可以完成与服务器的数据交互
请求流程:
一个js事件被触发 -》执行一个方法,调用异步方法;
(1)通过XMLHttpRequest发送请求,并通过XMLHttpRquest接受响应;?具体访问实现过程是什么?
[1]创建XMLHttpRequest对象
var xhr=new XMLHttpRequest();
[2]打开与服务器的一个链接
xhr.open("post","url..");
xhr.setRequestHeader("Content-Type","xxxxx");//设置请求头-http协议规定的参数值;
[3]发送请求参数
xhr.send("xxxx");
[4]服务器返回数据给客户端,同时返回一些状态,监听服务器端的状态改变
//监听响应状态
xhr.onreadystatechange=function(){
//服务器响应状态:0,1,2,3,4
//响应完成=4,注:不等于响应成功;xhr.readyState==4;
//响应成功=状态码:200;xhr.status=200;
//响应数据:xhr.responseText;
}
(2)通过DOM把数据显示到界面;
域 -> URL中域名,IP,端口不同都是跨域;就是跨域名访问;- 会有安全限制;
eg:在A站点访问B站点数据时;
《实现1》dataType : "jsonp";
简单原理:动态创建script 标签,然后利用 script 的 SRC 不受同源策略约束来跨域获取数据。
缺点!!是需要后端配合输出特定的返回信息-回调函数格式;
1 前端设置:dataType : "jsonp",//开启跨域;客户端给服务端传递一个回调函数,服务端返回的是一个回调函数的调用,并将数据放在回调函数中作为参数传递过来。
注:ajax一般使用js的XMLHttpRquest对象实现异步;
若设置dataType=jsonp;则不用xhr,使用script标签;内部会有一个回调函数;
2 后台服务设置:
《实现2:思路》
利用反应代理的机制来解决跨域的问题,
前端请求的时候先将请求发送到同源地址的后端,
通过后端请求转发来避免跨域的访问。
HTML5支持了CORS协议。
CORS 是一个 W3C 标准,全称是”跨域资源共享”(Cross-origin resource sharing),
允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。
它通过服务器增加一个特殊的 Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,
如果浏览器支持 CORS、并且判断 Origin 通过的话,就会允许 XMLHttpRequest 发起跨域请求。
前端使用了 CORS 协议,就需要后端设置支持非同源的请求,对于SpringBoot 对于CORS 同样有着良好的支持;
[坑]
ajax请求的datatyp为html.....日!一般都是json,居然必须要html;
参:其他...暂时不详
上一篇:使用js实现贪吃蛇小游戏
下一篇:jQuery