AJAX的作用

embedded/2025/3/13 18:36:02/

AJAX(Asynchronous JavaScript And XML)的工作原理基于浏览器与服务器的异步通信,其核心细节可分为以下几个关键步骤:


1. 事件触发与请求创建

  • 触发源:用户操作(点击按钮、输入文本等)或定时事件触发 AJAX 请求。
  • 创建请求对象:使用 XMLHttpRequest 或现代 Fetch API 创建通信通道。
     
    // 传统方式(XMLHttpRequest) const xhr = new XMLHttpRequest(); // 现代方式(Fetch API) fetch(url, options).then(res => res.json()); 

2. 配置请求参数

  • 设置请求类型GETPOSTPUTDELETE 等。
  • 定义请求目标:指定服务器端 URL。
  • 配置异步模式:默认异步(async: true),避免阻塞主线程。
     
    xhr.open('GET', 'https://api.example.com/data', true); 

3. 发送请求

  • 发送数据:对于POST请求,可附带数据(如 JSON、FormData)。
  • Header 设置:指定内容类型(如 Content-Type: application/json)。
     
    xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify({ key: 'value' })); 

4. 服务器端处理

  • 接收请求:服务器(如 Node.js、PHP、Python)解析请求参数。
  • 处理逻辑:执行数据库查询、计算等操作。
  • 返回数据:通常返回 JSON(取代传统的 XML),或 HTML/文本片段。

5. 浏览器处理响应

  • 监听状态变化:通过回调函数(onreadystatechange)或 Promise

  • 校验状态码

    • HTTP 状态码:200(成功)、404(未找到)、500(服务器错误)。
    • 请求状态readyState 从 0 到 4 (0:未初始化;4:请求完成)。
  • 解析数据:将响应转换为 JavaScript 对象(如 JSON.parse())。

     
    xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { const data = JSON.parse(xhr.responseText); updateUI(data); } }; 

6. 动态更新页面(DOM 操作)

  • 局部刷新:根据返回数据,使用 JavaScript 修改 DOM,如插入新内容或更新表格。
     
    function updateUI(data) { document.getElementById('result').innerHTML = data.message; } 

关键细节补充:

  1. 异步与同步模式

    • 异步(默认):非阻塞流程,需回调/Promise处理结果。
    • 同步async: false):阻塞主线程,可能导致页面卡顿(已淘汰)。
  2. 跨域问题(CORS)

    • 浏览器默认禁止跨域 AJAX 请求,需服务器设置 Access-Control-Allow-Origin 头。
  3. 数据格式演进

    • 传统:XML(冗余复杂)。
      现代:JSON(轻量、易解析)。
  4. 错误处理

    • 需捕获网络错误和服务器错误:
       
      fetch(url).then(res => { if (!res.ok) throw new Error('HTTP error'); return res.json(); }).catch(error => console.error('Request failed:', error)); 

示例工作流程图:

 
用户操作 → 创建请求 → 发送到服务器 → 服务器处理 → 返回数据 → 解析响应 → 更新页面局部 

需要更具体的代码示例(如 XMLHttpRequestFetch 的实现对比),或进一步解释某个环节的细节吗?


http://www.ppmy.cn/embedded/172320.html

相关文章

【每日八股】Redis篇(七):集群

目录 Redis 集群模式有哪些?Redis 切片集群的工作原理?哈希槽和 Redis 节点如何对应?主从模式的同步过程?全量同步增量同步 主服务器如何知道要将哪些增量数据发送给从服务器?如何避免主从数据不一致?主从架…

每日算法:力扣343.整数差分(动态规划)

题目: 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: n 10 输出…

3.11记录

leetcode刷题: 1. 334. 递增的三元子序列 - 力扣(LeetCode) 方法一:使用贪心算法求解 class Solution(object):def increasingTriplet(self, nums):first nums[0]second float(inf)for i in nums:if i>second:return Truee…

c++20 Concepts的简写形式与requires 从句形式

c20 Concepts的简写形式与requires 从句形式 原始写法(简写形式)等效写法(requires 从句形式)关键区别说明:组合多个约束的示例:两种形式的编译结果:更复杂的约束示例:标准库风格的约…

【网络编程】WSAAsyncSelect 模型

十、基于I/O模型的网络开发 接着上次的博客继续分享:select模型 10.8 异步选择模型WSAAsyncSelect 10.8.1 基本概念 WSAAsyncSelect模型是Windows socket的一个异步I/O 模型,利用这个模型,应用程序 可在一个套接字上接收以Windows 消息为基…

力扣-哈希表-844 比较含退格的字符串

思路和时间复杂度 思路&#xff1a;利用栈完成出栈操作时间复杂度&#xff1a; 代码 class Solution { public:bool backspaceCompare(string s, string t) {stack<char> ss;stack<char> tt;for(int i 0; i < s.size(); i){if(s[i] ! #){ss.push(s[i…

Redis相关面试题

以下是150道Redis相关面试题&#xff1a; Redis基础概念 1. Redis是什么&#xff1f; Redis是一个开源的、基于内存的高性能键值存储数据库&#xff0c;常用于缓存、消息队列等场景。 2. Redis的特点有哪些&#xff1f; • 高性能&#xff0c;读写速度快。 • 支持多种数据…

2025年,我们应该对供应链金融有怎样的考校?

在这些市场讨论的水面之上的数字之外&#xff0c;一个辐射出的更本质问题恰是市场对于供应链金融企业的愈发关注——即在经济逐步昂头的如今&#xff0c;刨除之前的波动不谈&#xff0c;作为产业经济的催化剂&#xff0c;供应链金融企业能否承担起应有的动力角色&#xff1f;或…