原生JS的Ajax技术
1.同步和异步
同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态
异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死
2.ajax运行原理
页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到 服务器端,
在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回给Ajax引擎后,
ajax引擎会监听到ajax的状态改变,触发你设置的事件,从而执行自定义的js逻辑代码完成某种页面功能。
(我觉得ajax起到一个缓冲的作用,就像io系统中的通道,会接受并传递客户端的请求,此时客户端就不需要等待响应了)
以下是原生js的ajax演示:
点击异步访问服务器端,过3秒后会在页面显示一个随机数,在此期间,客户端并没有卡死,可以点击test按钮
点击同步访问服务器端,过3秒后会在页面显示一个随机数,在此期间,客户端卡死,不可以点击test按钮
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | <!DOCTYPE html> <html> <head> <meta charset= "UTF-8" > <title>Insert title here</title> <script> function fun1(){ //1.创建ajax引擎对象 var xmlHttp= new XMLHttpRequest(); //2.绑定监听 监听服务器是否已经返回相应数据 xmlHttp.onreadystatechange=function(){ // 当请求已完成,响应已就绪 并且正确返回请求资源时。 //ajax引擎才会接收相应的数据 if (xmlHttp.readyState== 4 &&xmlHttp.status== 200 ){ //5.接受相应数据 var res=xmlHttp.responseText; document.getElementById( "span1" ).innerHTML=res; } } //3.绑定地址 // 1)请求资源的方式 2)访问的web资源的地址 3)是否异步 xmlHttp.open( "GET" , "/WEB22/ajaxServlet" , true ); //4.发送请求 xmlHttp.send(); } function fun2(){ //1.创建ajax引擎对象 var xmlHttp= new XMLHttpRequest(); //2.绑定监听 监听服务器是否已经返回相应数据 xmlHttp.onreadystatechange=function(){ // 当请求已完成,响应已就绪 并且正确返回请求资源时。 //ajax引擎才会接收相应的数据 if (xmlHttp.readyState== 4 &&xmlHttp.status== 200 ){ //5.接受相应数据 var res=xmlHttp.responseText; document.getElementById( "span2" ).innerHTML=res; } } //3.绑定地址 // 1)请求资源的方式 2)访问的web资源的地址 3)是否异步 xmlHttp.open( "GET" , "/WEB22/ajaxServlet" , false ); //4.发送请求 xmlHttp.send(); } </script> </head> <body> <input type= "button" value= "异步访问服务器端" onclick= "fun1()" ><span id= "span1" ></span><br> <input type= "button" value= "同步访问服务器端" onclick= "fun2()" ><span id= "span2" ></span><br> <input type= "button" value= "test" onclick= "alert()" > </body> </html> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?