Ajax原理

本文将通过一个具体的例子来展示Ajax的工作原理,通过与传统请求响应方式的对比展现Ajax中处理请求响应的不同方式。在这个示例程序中,所要完成的任务非常简单,仅仅需要输入一个姓名然后提交这个表单,在服务器端处理这个请求,然后在页面显示处理的结果,在下面的示例程序中,将展示通过传统方式和Ajax方式分别处理这个请求响应的具体过程。

传统方式:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
  2.     pageEncoding="ISO-8859-1"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     <form action="SayHello.jsp">  
  11.         name:<input type="text" name="name"/>  
  12.         <input type="submit" name="submit"/>  
  13.     </form>  
  14.     <%  
  15.         if(request.getParameter("name")!=null&&request.getParameter("name").length()>0)  
  16.             out.print("Hello "+request.getParameter("name"));  
  17.     %>  
  18. </body>  
  19. </html>  

传统方式的实现方式是直接将表单提交到自身的页面,然后在服务器端经过编译后执行其中的Java代码。

Ajax方式(Servlet代码以及配置文件略):

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
  7. <title>SayHello</title>  
  8. <script type="text/javascript">  
  9.     //创建XMLHttpReques对象   
  10.     function createXMLHttpRequest(){  
  11.           
  12.         if(window.XMLHttpRequest){  
  13.             //Mozilla浏览器   
  14.               
  15.             XMLHttpReq=new XMLHttpRequest();  
  16.         }else{  
  17.               
  18.             //IE浏览器   
  19.             if(window.ActiveXObject){  
  20.                 try{  
  21.                     XMLHttpReq=new ActionXObject("Msxm12.XMLHTTP");  
  22.                 }catch(e){  
  23.                     try{  
  24.                         XMLHttpReq=new ActiveXObject("Microsoft.XMLHTTP");  
  25.                     }catch(e){}  
  26.                 }  
  27.             }  
  28.         }  
  29.     }  
  30.     //处理服务器响应结果   
  31.      function handleResponse() {  
  32.         // 判断对象状态   
  33.         if (XMLHttpReq.readyState == 4) {   
  34.             // 信息已经成功返回,开始处理信息   
  35.            if (XMLHttpReq.status == 200) {   
  36.                 var out = "";  
  37.                 var res = XMLHttpReq.responseXML;  
  38.                 var response= res.getElementsByTagName("response")[0].firstChild.nodeValue;  
  39.                 //5. 解析服务器返回的信息,更新用户界面  
  40.                 document.getElementById("Hello").innerHTML = response;  
  41.                }  
  42.          }  
  43.        }  
  44.     //发送客户端的请求   
  45.     function sendRequest(url){  
  46.         //1.创建XMLHttpRequest   
  47.         createXMLHttpRequest();  
  48.         //2.设置回调函数   
  49.         XMLHttpReq.onreadystatechange=handleResponse;  
  50.         //3.初始化XMLHttpRequest组建并发送请求   
  51.         XMLHttpReq.open("GET",url,true);  
  52.         //发送请求   
  53.         XMLHttpReq.send(null);  
  54.     }  
  55.     //开始调用Ajax的功能   
  56.     function sayHello()  
  57.     {  
  58.         var name=document.getElementById("name").value;  
  59.         //发送请求   
  60.         sendRequest("SayHell?name="+name);  
  61.     }  
  62. </script>  
  63. </head>  
  64. <body>  
  65.     <font size="1">  
  66.         name:<input type="text" id="name"/>  
  67.         <input type="button" value="提交" onclick="sayHello()"/>  
  68.         <div id="Hello"></div>  
  69.     </font>  
  70. </body>  
  71. </html>  

代码解析:

1.创建XMLHttpRequest

2.设置回调函

3.初始化XMLHttpRequest组建并发送请求

4.服务器返回响应信息

5.解析服务器返回的信息,更新用户界面

详细调用过程如下

最终Ajax方式处理请求的效果是通过XMLHttpRequest对象向服务器发送请求,在得到服务器的返回的处理结果以后,文本框中的用户输入信息依然存在,使用Ajax只是刷新了页面的局部区域,把处理的结果展示在页面的指定位置,对于页面的其他部分不会进行刷新。

本文将通过一个具体的例子来展示Ajax的工作原理,通过与传统请求响应方式的对比展现Ajax中处理请求响应的不同方式。在这个示例程序中,所要完成的任务非常简单,仅仅需要输入一个姓名然后提交这个表单,在服务器端处理这个请求,然后在页面显示处理的结果,在下面的示例程序中,将展示通过传统方式和Ajax方式分别处理这个请求响应的具体过程。

传统方式:

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
  2.     pageEncoding="ISO-8859-1"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
  7. <title>Insert title here</title>  
  8. </head>  
  9. <body>  
  10.     <form action="SayHello.jsp">  
  11.         name:<input type="text" name="name"/>  
  12.         <input type="submit" name="submit"/>  
  13.     </form>  
  14.     <%  
  15.         if(request.getParameter("name")!=null&&request.getParameter("name").length()>0)  
  16.             out.print("Hello "+request.getParameter("name"));  
  17.     %>  
  18. </body>  
  19. </html>  

传统方式的实现方式是直接将表单提交到自身的页面,然后在服务器端经过编译后执行其中的Java代码。

Ajax方式(Servlet代码以及配置文件略):

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
  7. <title>SayHello</title>  
  8. <script type="text/javascript">  
  9.     //创建XMLHttpReques对象   
  10.     function createXMLHttpRequest(){  
  11.           
  12.         if(window.XMLHttpRequest){  
  13.             //Mozilla浏览器   
  14.               
  15.             XMLHttpReq=new XMLHttpRequest();  
  16.         }else{  
  17.               
  18.             //IE浏览器   
  19.             if(window.ActiveXObject){  
  20.                 try{  
  21.                     XMLHttpReq=new ActionXObject("Msxm12.XMLHTTP");  
  22.                 }catch(e){  
  23.                     try{  
  24.                         XMLHttpReq=new ActiveXObject("Microsoft.XMLHTTP");  
  25.                     }catch(e){}  
  26.                 }  
  27.             }  
  28.         }  
  29.     }  
  30.     //处理服务器响应结果   
  31.      function handleResponse() {  
  32.         // 判断对象状态   
  33.         if (XMLHttpReq.readyState == 4) {   
  34.             // 信息已经成功返回,开始处理信息   
  35.            if (XMLHttpReq.status == 200) {   
  36.                 var out = "";  
  37.                 var res = XMLHttpReq.responseXML;  
  38.                 var response= res.getElementsByTagName("response")[0].firstChild.nodeValue;  
  39.                 //5. 解析服务器返回的信息,更新用户界面  
  40.                 document.getElementById("Hello").innerHTML = response;  
  41.                }  
  42.          }  
  43.        }  
  44.     //发送客户端的请求   
  45.     function sendRequest(url){  
  46.         //1.创建XMLHttpRequest   
  47.         createXMLHttpRequest();  
  48.         //2.设置回调函数   
  49.         XMLHttpReq.onreadystatechange=handleResponse;  
  50.         //3.初始化XMLHttpRequest组建并发送请求   
  51.         XMLHttpReq.open("GET",url,true);  
  52.         //发送请求   
  53.         XMLHttpReq.send(null);  
  54.     }  
  55.     //开始调用Ajax的功能   
  56.     function sayHello()  
  57.     {  
  58.         var name=document.getElementById("name").value;  
  59.         //发送请求   
  60.         sendRequest("SayHell?name="+name);  
  61.     }  
  62. </script>  
  63. </head>  
  64. <body>  
  65.     <font size="1">  
  66.         name:<input type="text" id="name"/>  
  67.         <input type="button" value="提交" onclick="sayHello()"/>  
  68.         <div id="Hello"></div>  
  69.     </font>  
  70. </body>  
  71. </html>  

代码解析:

1.创建XMLHttpRequest

2.设置回调函

3.初始化XMLHttpRequest组建并发送请求

4.服务器返回响应信息

5.解析服务器返回的信息,更新用户界面

详细调用过程如下

最终Ajax方式处理请求的效果是通过XMLHttpRequest对象向服务器发送请求,在得到服务器的返回的处理结果以后,文本框中的用户输入信息依然存在,使用Ajax只是刷新了页面的局部区域,把处理的结果展示在页面的指定位置,对于页面的其他部分不会进行刷新。

<think>嗯,用户想了解AJAX的工作原理。让我先回忆一下AJAX相关的知识。AJAX全称是Asynchronous JavaScript and XML,不过现在可能更多用JSON代替XML了。首先,AJAX的核心应该是在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。这应该涉及到异步通信,也就是JavaScript在后台发送请求,处理响应,然后局部更新页面。 接下来,需要具体说明AJAX的工作流程。可能需要提到XMLHttpRequest对象,或者现在常用的Fetch API。用户提供的引用里提到了XHR的使用步骤,比如创建对象、open方法、监听事件、send方法。这些步骤需要详细解释。比如,创建XHR对象后,用open设置请求方法和URL,然后设置回调函数处理响应,最后发送请求。另外,还要说明异步处理,避免阻塞页面。 然后,用户提到的引用中有关于AJAX的优点,比如局部刷新、提升用户体验。这部分应该作为工作原理带来的好处来强调。例如,百度地图的例子,局部更新而不是整个页面重载,减少数据传输量,加快响应速度。 可能还需要对比传统网页和AJAX的区别。传统方式是同步的,每次操作都导致整个页面刷新,而AJAX在后台异步处理,只更新需要的部分。这样用户操作不会中断,体验更流畅。 另外,引用中提到了Ajax的实现步骤,比如JS和jQuery的不同方法。但用户的问题主要是原理,所以可能需要简要提到不同实现方式,但重点在原理部分。比如,无论用原生JS还是jQuery,底层都是基于XHR或Fetch API的异步通信。 还要注意用户提供的引用内容,比如引用[4]提到XHR的使用步骤,创建对象、调用open、监听事件、send。这些步骤需要详细拆解,每一步的作用是什么。比如,open方法设置请求类型和URL,send发送请求,监听事件处理响应。 可能还需要提到同源策略和跨域问题,但用户的问题集中在原理,可能不需要深入,但可以稍微提一下,比如如果请求不同源,可能会遇到限制,需要CORS等处理。 总结下来,回答的结构应该是先定义AJAX,然后核心原理(异步、局部更新),接着详细步骤(XHR对象的使用流程),最后优缺点和应用场景。确保覆盖用户提供的引用中的关键点,比如局部刷新、异步、XHR步骤等,并正确标注引用来源。</think>### AJAX 的工作原理 AJAX(Asynchronous JavaScript and XML)是一种通过异步通信实现网页局部更新的技术。其核心是**在不重新加载整个页面的情况下,与服务器交换数据并动态更新部分内容**。以下是其工作原理的详细步骤: --- #### 1. **异步通信的核心组件** AJAX 基于以下组件实现异步交互: - **`XMLHttpRequest` 对象**(现代浏览器支持 `fetch API`):用于在后台与服务器交换数据[^4]。 - **JavaScript**:负责发送请求、处理响应并更新页面。 - **DOM(文档对象模型)**:动态修改网页内容。 --- #### 2. **AJAX 的工作流程** 以下是基于 `XMLHttpRequest` 的典型流程: 1. **创建 XHR 对象** 通过 `new XMLHttpRequest()` 初始化一个请求对象。 ```javascript const xhr = new XMLHttpRequest(); ``` 2. **配置请求参数** 使用 `open()` 方法设置请求类型(GET/POST)和 URL。 ```javascript xhr.open('GET', 'https://api.example.com/data', true); // 第三个参数 true 表示异步 ``` 3. **监听服务器响应** 通过事件监听(如 `load` 或 `readystatechange`)处理返回的数据[^4]。 ```javascript xhr.onload = function() { if (xhr.status === 200) { document.getElementById('content').innerHTML = xhr.responseText; } }; ``` 4. **发送请求** 调用 `send()` 方法发起请求,可附加请求体(如 POST 数据)[^4]。 ```javascript xhr.send(); ``` --- #### 3. **关键特性** - **异步性**:JavaScript 继续执行其他任务,无需等待服务器响应[^2]。 - **局部更新**:仅修改 DOM 中需要变化的部分(如百度地图的位置更新)[^2]。 - **数据格式灵活**:支持 JSON、XML、HTML 等多种数据格式。 --- #### 4. **AJAX 的优势与限制** | **优势** | **限制** | |-----------------------------------|-----------------------------------| | 提升用户体验(无整页刷新)[^2] | 依赖 JavaScript,需考虑兼容性 | | 减少带宽消耗(局部数据传输) | 跨域请求需配置 CORS 或代理 | | 支持前后端分离架构 | SEO 不友好(动态内容不易被爬取) | --- #### 5. **应用场景** - 表单验证(实时检查用户名是否重复) - 无限滚动(如社交媒体动态加载) - 自动补全搜索(如 Google 搜索建议) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值