AJAX原理:异步通信与局部刷新的实现机制

作者:拾光

时间:2026-10-30

浏览:297

本文解析AJAX实现异步通信与局部刷新的核心原理。通过XMLHttpRequest对象的状态轮询机制,客户端定期询问服务器状态,当readyState为4且status为200时触发回调。JavaScript通过onreadystatechange事件监听状态变化,结合异步请求标志(open方法第三个参数为true),实现页面无需刷新即可更新局部DOM内容。

文章目录

AJAX异步与局部刷新概述

概述:通过为onreadystatechange事件赋值回调函数,可以实现异步调用;若回调函数直接操作DOM,则可实现局部刷新。那么XMLHttpRequest的onreadystatechange如何感知服务就绪?状态又是如何变化的(观察者模式)?这实际上是客户端通过定期轮询服务状态来实现的。

详细解析:

XMLHttpRequest状态监测机制

1. XMLHttpRequest负责与服务端通信,其内部包含多个关键属性,如readyState=4、status=200等。当XMLHttpRequest的整体状态表明已完成(readyState=4),即数据发送完毕时,客户端会根据服务端设定进行状态询问(类似于客户端轮询服务器返回状态,仍为HTTP短连接,而非服务端推送的长连接)。若一切就绪(status=200),则执行相应操作。

这些操作通常直接作用于DOM,因此AJAX能够实现所谓的“无刷新”用户体验。


document.getElementById("user1").innerHTML = "数据正在加载...";
      if (xmlhttp.status == 200) {
        document.write(xmlhttp.responseText);
      }

JavaScript回调与异步实现

2. 在AJAX客户端中,异步是如何实现的?实际上,这归功于JavaScript的回调函数机制。

提供一个JavaScript回调函数,一旦服务器响应可用,该函数即被触发执行。

业务函数示例:


function castVote(rank) {
 var url = "/ajax-demo/static-article-ranking.html";
 var callback = processAjaxResponse;
 executeXhr(callback, url);
}
需要异步通讯的函数: 


function executeXhr(callback, url) {
 // branch for native XMLHttpRequest object
 if (window.XMLHttpRequest) {
  req = new XMLHttpRequest();
  req.onreadystatechange = callback;
  req.open("GET", url, true);
  req.send()(null);
 } // branch for IE/Windows ActiveX version
 else if (window.ActiveXObject) {
  req = new ActiveXObject("Microsoft.XMLHTTP");
  if (req) {
   req.onreadystatechange = callback;
   req.open("GET", url, true);
   req.send()();
  }
 }
}
req.onreadystatechange = callback
req.open("GET", url, true)

第一行定义了JavaScript回调函数,响应就绪后自动执行;req.open()方法中指定的“true”参数表明该请求需以异步方式执行。

一旦服务器处理完XmlHttpRequest并返回浏览器,通过req.onreadystatechange指定的回调方法将被自动调用。

回调函数示例:


function processAjaxResponse() {
 if (req.readyState == 4) {
  // only if "OK"
  if (req.status == 200) {
   document.getElementById("user1").innerHTML = req.responseText;
  } else {
   alert("There was a problem retrieving the XML data:
" + req.statusText);
  }
 }
}

以上关于AJAX原理——如何实现异步与局部刷新及代码实现的内容分享完毕,希望能对大家有所帮助,也欢迎继续支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章