浅谈AJAX
什么是AJAX?
AJAX(Asynchronous JavaScript and XML),中文叫做:异步的JavaScript和XML。这是一种 Web 交互方法
AJAX说白了,就是”服务器和客户端之间是如何交流的?“
这是一种“老技术,新用法”。它最早是2005年由"AJAX之父"Jesse James Garrett提出。
AJAX技术的理解
实际上,它是由几项已经存在的技术组合而成的。AJAX技术包含了JavaScript、XML、CSS、XTSL、DOM、HTML/XHML和XMLHttpRequest 七种技术,这些技术通过AJAX联合起来,取长补短。
AJAX 允许只更新一个 HTML 页面的部分 DOM(文档对象模型:当网页被加载时,浏览器会创建页面的文档对象模型),而无须重新加载整个页面。AJAX 还允许异步工作,这意味着当网页的一部分正试图重新加载时,你的代码可以继续运行(相比之下,同步会阻止代码继续运行,直到这部分的网页完成重新加载)。
AJAX的五大特点
- 无需刷新页面就可以改变页面内容,减少用户等待事件和资源调用。
- 按需获取数据,每次只从服务器端获取需要的数据
- 读取外部数据,进行数据处理整合
- 异步与服务器进行交互,在交互过程中用户无需等待,仍然可以继续操作
- 改善表单验证方式,不需要打开新页面,也不需要将整个页面数据提交
AJAX与传统web区别
AJAX交互
- 通过XMLHttpRequest(XHR)对象与服务器进行交互 (通过
XMLHttpRequest
可以在不刷新页面的情况下请求特定 URL,获取数据。尽管名称如此,XMLHttpRequest
可以用于获取任何类型的数据,而不仅仅是 XML。它甚至支持 HTTP 以外的协议(包括 file:// 和 FTP),尽管可能受到更多出于安全等原因的限制。) - XHR请求的数据不是页面
- XHR可以连续向服务器发送请求(即支持异步操作)
传统web交互
-
通过HTTP与服务器交互
-
HTTP请求的是整个页面
-
HTTP是请求响应的,必须等服务器响应页面后,才能再发送下一个HTTP请求(即不支持异步操作)
AJAX的核心优势
-
按需获取数据(核心)
不像传统web一样,服务其每次响应一整个页面。Ajax可以只会让服务器响应当下页面需要更新的数据,大大减少了数据的实际传输量
-
节约网络带宽
由于降低数据传输量,就相当于减轻服务器和带宽的负担,并且Ajax技术可以将传统服务器的工作转嫁给客户端,进一步节约空间和带宽
-
无需刷新页面
通过异步发送请求,Ajax技术只是更新数据,无需改变整个页面
-
基于标准化技术
几乎所有的浏览器都支持Ajax技术
AJAX使用的步骤
- 建立XMLHTTPRequest对象(原因见上述区别)
- 设置获取web服务器数据的回调函数
- 使用open()方法与web服务器建立连接
- 使用send()方法对服务器发送XHR请求
- 在回调函数中接收web服务器返回的数据
首先建立 XMLHttpRequest
对象,目的是需要一个包含功能的对象实例去使用Javascript去向服务器发送 HTTP 请求
const httpRequest = new XMLHttpRequest();
发送请求后就会有响应。此时,需要告诉 XMLHttpRequest
对象哪个Javascript函数去处理响应,并设置了对象的 onreadystatechange
属性后给它命名,当请求状态改变时调用函数
function handler() {
// 在这里处理服务器响应。
}
httpRequest.onreadystatechange = handler;//引用赋值给函数
要注意的是,函数名后没有括号和参数,因为这是把一个引用赋值给了函数,而不是真正的调用了它。
接下来,声明当你接到响应后要做什么,你要通过调用 HTTP 请求对象的 open()
和 send()
方法发送一个实际的请求,像下面这样:
httpRequest.open("GET", "http://www.example.org/some.file", true);
httpRequest.send();
open()
的参数主要采用 请求方法 + url,最后一个true是一个可选项,用于设置请求是否是异步的。如果设为 true
(默认值),即开启异步
send()
方法的参数可以是任何你想发送给服务器的内容,如果是 POST
请求的话。发送表单数据时应该用服务器可以解析的格式
发送请求时,你提供的 Javascript 函数名负责处理响应,下文中的nameOfTheFunction
可以视为第一步的handler
:
httpRequest.onreadystatechange = nameOfTheFunction;
这个函数应该做什么?首先,函数要检查请求的状态。如果状态的值是 XMLHttpRequest.DONE
(对应的值是 4),意味着服务器响应收到了并且是没问题的,然后就可以继续执行。
if (httpRequest.readyState === XMLHttpRequest.DONE) {
// 很好,服务器已经接收到了响应。
} else {
// 还没准备好。
}
对于XMLHttpRequest.DONE
的状态码,如下所示:
- 0(未初始化)或(请求还未初始化)
- 1(正在加载)或(已建立服务器链接)
- 2(已加载)或(请求已接收)
- 3(交互)或(正在处理请求)
- 4(完成)或(请求已完成并且响应已准备好)
接下来,检查 HTTP 响应的响应状态码。在下面的例子中,我们通过检查响应码 200 OK
判断 AJAX 调用有没有成功。
if (httpRequest.status === 200) {
// 完美!
} else {
// 请求有问题。
// 比如,响应可能是 404 (Not Found)
// 或 500 (Internal Server Error) 响应码。
}
HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。 响应被归为以下五大类:
- 信息响应 (100–199)
- 成功响应(200–299)
- 重定向消息(300–399)
- 客户端错误响应 (400–499)
- 服务端错误响应 (500–599)
想了解更多的小伙伴看这篇 响应状态码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律