AJAX 工作原理及概述
AJAX 使用 XMLHttpRequest 对象与服务器通信,它可以使用 JSON、XML、HTML和文本等多种格式发送和接受。AJAX 最吸引人的是它的异步特性,也就是说可以在不重新刷新页面的情况下雨服务器通信,交换数据,更新页面。
最主要的两个特性:
- 在不重新加载页面的情况下发送请求给服务器
- 接受并使用从服务器发来的数据
工作原理
Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后用 javascript 来操作 DOM 而更新页面。这其中最关键的一步就是从服务器获得请求数据。
发送 HTTP 请求
创建 XMLHttpRequest 对象,需要注意兼容性问题
1 | function sendAjax() { |
如何获取 response 数据
xhr 提供了 3 个属性来获取请求返回的数据,分别是:xhr.response、xhr.responseText、xhr.responseXML
xhr.response- 默认值:空字符串""- 当请求完成时,此属性才有正确的值 - 请求未完成时,此属性的值可能是""或者null,具体与xhr.responseType有关:当responseType为""或"text"时,值为"";responseType为其他值时,值为nullxhr.responseText- 默认值为空字符串""- 只有当responseType为"text"、””时,xhr对象上才有此属性,此时才能调用xhr.responseText,否则抛错 - 只有当请求成功时,才能拿到正确值。以下 2 种情况下值都为空字符串"":请求未完成、请求失败xhr.responseXML- 默认值为null- 只有当responseType为"text"、""、"document"时,xhr对象上才有此属性,此时才能调用xhr.responseXML,否则抛错 - 只有当请求成功且返回数据被正确解析时,才能拿到正确值。以下 3 种情况下值都为null:请求未完成、请求失败、请求成功但返回数据无法被正确解析时
如何追踪 ajax 请求的当前状态
用 xhr.readyState 这个属性即可追踪到。这个属性是只读属性,总共有 5 种可能值,分别对应 xhr 不同的不同阶段。每次 xhr.readyState 的值发生变化时,都会触发 xhr.onreadystatechange 事件,我们可以在这个事件中进行相关状态判断。
1 | xhr.onreadystatechange = function () { |

可以发送什么类型的数据
xhr.send(data)的参数 data 可以是以下几种类型:
ArrayBufferBlobDocumentDOMStringFormDatanull
事件触发顺序
