Ajax原理

一、什么是Ajax

Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助。简单地说,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并在网页上呈现出来。常见运用场景有表单验证是否登入成功、百度搜索下拉框提示和快递单号查询等等。

Ajax目的:提高用户体验,较少网络数据的传输量。

二、Ajax原理是什么

Ajax请求数据流程:其中最核心的依赖是浏览器提供的XMLHttpRequest对象,它使得浏览器可以发出HTTP请求与接收HTTP响应。浏览器接着做其他事情,等收到XHR返回来的数据再渲染页面。理解了Ajax的工作原理后,接下来探讨下如何使用Ajax。

三、Ajax的使用

1、创建Ajax核心对象XMLHttpRequest(记得考虑兼容性)
1. var xhr=null;
2. if (window.XMLHttpRequest)
3. {// 兼容 IE7+, Firefox, Chrome, Opera, Safari
4. xhr=new XMLHttpRequest();
5. } else{// 兼容 IE6, IE5
6. xhr=new ActiveXObject("Microsoft.XMLHTTP");
7. }

2、向服务器发送请求
1. xhr.open(method,url,async);
2. send(string);
//post请求时才使用字符串参数,否则不用带参数。
method:请求的类型;GET 或 POST
url:文件在服务器上的位置
async:true(异步)或 false(同步)
注意:post请求一定要设置请求头的格式内容
xhr.open("POST","test.html",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("fname=Henry&lname=Ford");                 //post请求参数放在send里面,即请求体

3、服务器响应处理(区分同步跟异步两种情况)
responseText 获得字符串形式的响应数据。
responseXML 获得XML 形式的响应数据。

①同步处理

1. xhr.open("GET","info.txt",false);
2. xhr.send();
3. document.getElementById("myDiv").innerHTML=xhr.responseText;    //获取数据直接显示在页面上

②异步处理

相对来说比较复杂,要在请求状态改变事件中处理。
1. xhr.onreadystatechange=function() {
2. if (xhr.readyState==4 &&xhr.status==200) {
3. document.getElementById("myDiv").innerHTML=xhr.responseText;
4. }
5. }

readyState

0-(未初始化)还没有调用send()方法
1-(载入)已调用send()方法,正在发送请求
2-(载入完成)send()方法执行完成,已经接收到全部响应内容
3-(交互)正在解析响应内容
4-(完成)响应内容解析完成,可以在客户端调用了

status

③GET和POST请求数据区别

请求数据时的区别:

let xhr = new XMLHttpRequest();
xhr.open("GET","/list?page=2");      //GET请求参数需要拼在URL上面
xhr.send();

let xhr = new XMLHttpRequest();
xhr.open("POST","/list");
xhr.send("page=5&pageSize=20");       //POST请求数据是放在send里面的

 GET请求的差数直接拼接在url上面。
POST请求的参数就不是放在url了,而是放在send里面,即请求体。

 

<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、付费专栏及课程。

余额充值