Ajax原理、用法与经典代码实例

一、什么是 Ajax

Ajax (Asynchronous JavaScript and XML,异步的 JavaScript 和 XML)是一种在无需重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容的技术。

简单来说,Ajax 让网页能够实现"局部刷新"、"无刷新动态加载",比如:

  • 点击加载更多内容

  • 搜索框的自动补全

  • 提交表单不用整个页面跳转

Ajax 不是一种单独的技术,而是一组技术的组合,核心是 JavaScript 的异步请求能力。


二、Ajax 的原理

  1. 用户在页面上触发事件(如点击按钮、输入内容)

  2. JavaScript 通过浏览器内置的 XMLHttpRequest 对象(或现代 fetch API)向服务器发送 HTTP 请求

  3. 服务器处理请求后,返回数据(常见格式为 JSON、XML、HTML、文本)

  4. JavaScript 收到响应后,动态更新页面内容,而不用整个页面刷新


三、Ajax 的典型应用场景

  • 搜索引擎的下拉联想

  • 发送验证码(异步倒计时)

  • 聊天消息的实时获取

  • 电商商品筛选和分页

  • 表单的无刷新提交和校验


四、Ajax 的经典写法

1. 原生 XMLHttpRequest(经典写法)

javascript 复制代码
// 创建一个 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();

// 配置请求方式、URL、是否异步
xhr.open("GET", "https://api.example.com/data", true);

// 监听请求状态变化
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) { // 请求完成
        if (xhr.status === 200) { // 状态码200=成功
            // 处理响应内容
            var data = JSON.parse(xhr.responseText);
            document.getElementById("result").innerText = data.message;
        } else {
            console.error("请求失败", xhr.status);
        }
    }
};

// 发送请求
xhr.send();
  1. jQuery Ajax(广泛用于早期项目)
javascript 复制代码
$.ajax({
    url: "https://api.example.com/data",
    type: "GET",
    dataType: "json",
    success: function(data) {
        $("#result").text(data.message);
    },
    error: function(xhr, status, error) {
        alert("请求失败: " + error);
    }
});

五、现代 Ajax 写法(Promise 风格)

  1. fetch API(原生 Promise)
javascript 复制代码
fetch("https://api.example.com/data")
  .then(response => {
      if (!response.ok) throw new Error("网络错误");
      return response.json();
  })
  .then(data => {
      document.getElementById("result").innerText = data.message;
  })
  .catch(error => {
      console.error("请求失败:", error);
  });
  1. axios(社区主流库,Promise/async风格)
javascript 复制代码
// 需提前用 npm/yarn 安装 axios
import axios from "axios";

axios.get("https://api.example.com/data")
  .then(response => {
      document.getElementById("result").innerText = response.data.message;
  })
  .catch(error => {
      console.error("请求失败:", error);
  });
  1. async/await(Promise的语法糖)
javascript 复制代码
async function loadData() {
    try {
        const response = await fetch("https://api.example.com/data");
        if (!response.ok) throw new Error("网络错误");
        const data = await response.json();
        document.getElementById("result").innerText = data.message;
    } catch (error) {
        console.error("请求失败:", error);
    }
}

loadData();

六、Ajax 返回的数据格式

  • JSON(最常用) :{"msg": "success"}

  • XML:早期流行,现在已较少用

  • HTML:直接插入到 DOM

  • 纯文本:如普通字符串


七、Ajax 的优点与注意点

优点:

  • 提升用户体验(局部刷新、无需等待页面重载)

  • 减少服务器压力与网络流量

  • 支持实时应用(聊天、股票、物流等)

注意点:

  • 跨域请求限制(可用CORS、JSONP等方式解决)

  • 异步处理(要理解回调、Promise)

  • 前后端接口需约定好数据格式


八、总结

Ajax 是前端和服务器之间"无刷新"通信的基础。经典用 XMLHttpRequest,现在更推荐 fetch/axios 等 Promise 风格。


九、演示小结

  • 经典写法(XMLHttpRequest):入门理解 Ajax 原理

  • 现代写法(fetch/axios):实际开发必用,更优雅、易扩展

相关推荐
小码哥_常2 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮5 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
学长毕设5 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
她说可以呀6 小时前
Vue插槽
前端·javascript·vue.js
qq_448011166 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
zzu123zsw6 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
aixingpan6 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352907 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
源码集结号7 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场7 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算