JavaScript AJAX

AJAX(Asynchronous JavaScript and XML)是一种在不重新加载整个页面的情况下,与服务器进行异步通信的技术。它允许网页在后台发送和接收数据,从而实现动态更新页面内容。

AJAX的工作原理

  • 用户触发事件(如点击按钮)
  • JavaScript通过XMLHttpRequestFetch API 向服务器发送请求。
  • 服务器处理请求并返回数据(通常是JSON或XML格式)
  • JavaScript解析返回的数据并更新页面内容

核心原理

  • XMLHttpRequest :创建异步请求,通过 open() 设置请求方法(GET/POST)、send() 发送请求。
  • 数据格式 :支持 JSON(轻量级)和 XML(结构化),例如 response = JSON.parse(xhr.responseText)

使用 XMLHttpRequest 实现 AJAX

  1. 创建 XMLHttpRequest 对象。
  2. 使用 open() 方法设置请求类型(GET/POST)和 URL。
  3. 设置 onload 回调函数处理成功响应。
  4. 设置 onerror 回调函数处理错误。
  5. 使用 send() 方法发送请求。
js 复制代码
const xhr = new XMLHttpRequest();
xhr.open("GET", "https://jsonplaceholder.typicode.com/posts/1", true);

xhr.onload = function () {
  if (xhr.status >= 200 && xhr.status < 300) {
    const data = JSON.parse(xhr.responseText);
    console.log(data);
  } else {
    console.error("Request failed with status:", xhr.status);
  }
};

xhr.onerror = function () {
  console.error("Request failed");//可以不写
};

xhr.send();

使用 Fetch API 实现 AJAX

Fetch API 是现代浏览器提供的更简洁、强大的 AJAX 实现方式。(基于 Promise 的简化请求方式。)

  1. 使用 fetch() 方法发送请求。
  2. 使用 .then() 处理响应并解析 JSON 数据。
  3. 使用 .catch() 处理错误。
js 复制代码
fetch("https://jsonplaceholder.typicode.com/posts/1")
  .then((response) => {
    if (!response.ok) {
      throw new Error("Network response was not ok");
    }
    return response.json();
  })
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    console.error("Fetch error:", error);
  });

使用 async/await 简化 Fetch API

async/await 是 ES7 引入的语法糖,可以更简洁地处理异步操作。

  1. 使用 async 声明异步函数。
  2. 使用 await 等待 fetch()response.json() 完成。
  3. 使用 try/catch 处理错误。(可以不写)
js 复制代码
async function fetchData() {
  try {
    const response = await fetch("https://jsonplaceholder.typicode.com/posts/1");
    if (!response.ok) {
      throw new Error("Network response was not ok");
    }
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error("Fetch error:", error);
  }
}
fetchData();

发送POST请求

使用 Fetch API 发送 POST 请求

  1. 调用fetch函数
  2. 处理响应(fetch返回一个Promise,表示请求的响应。)
  3. 处理解析后端数据
  4. 错误处理
js 复制代码
fetch("https://jsonplaceholder.typicode.com/posts", {
  method: "POST",
  //请求头
  headers: {
    "Content-Type": "application/json",
  },  
  //请求体
  body: JSON.stringify({
    title: "foo",
    body: "bar",
    userId: 1,
  }),  
})
//fetch返回的响应对象
  .then((response) => response.json())
  //解析后的JSON数据
  .then((data) => {
    console.log(data);
  })
  .catch((error) => {
    console.error("Fetch error:", error);
  });

使用XMLHttpRequest发送POST请求

  1. 创建XMLHttpRequest对象
  2. 请求配置
  3. 设置请求头
  4. 处理响应
  5. 处理错误
  6. 发送请求
js 复制代码
const xhr = new XMLHttpRequest();
xhr.open("POST", "https://jsonplaceholder.typicode.com/posts", true);
xhr.setRequestHeader("Content-Type", "application/json");
//"application/json"表示请求体类型
xhr.onload = function () {
  if (xhr.status >= 200 && xhr.status < 300) {
    const data = JSON.parse(xhr.responseText);
    console.log(data);
  } else {
    console.error("Request failed with status:", xhr.status);
  }
};

xhr.onerror = function () {
  console.error("Request failed");
};

xhr.send(JSON.stringify({
  title: "foo",
  body: "bar",
  userId: 1,
}));

处理JSON数据

JSON是AJAX中最常用的数据格式

解析JSON

js 复制代码
fetch("https://jsonplaceholder.typicode.com/posts/1")
  .then((response) => response.json())
  .then((data) => {
    console.log(data.title); // 输出: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit"
  });

生成JSON

js 复制代码
const data = {
  title: "foo",
  body: "bar",
  userId: 1,
};

const jsonString = JSON.stringify(data);
console.log(jsonString); // 输出: {"title":"foo","body":"bar","userId":1}

跨域请求

跨域请求是指请求的资源与当前页面的域名、协议或端口不同。浏览器默认禁止跨域请求,除非服务器设置了 CORS(跨域资源共享)头。

js 复制代码
Access-Control-Allow-Origin: *

使用第三方库(如Axios)

Axios是一个流行的HTTP客户端库,简化了AJAX请求

js 复制代码
axios.get("https://jsonplaceholder.typicode.com/posts/1")
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.error("Axios error:", error);
  });

总结*

  • AJAX:通过 XMLHttpRequestFetch API 实现异步通信。
  • Fetch API:现代、简洁的 AJAX 实现方式,支持 async/await
  • POST 请求:通过设置 methodbody 发送数据。
  • JSON:常用的数据格式,使用 JSON.parse()JSON.stringify() 解析和生成。
  • CORS:处理跨域请求时需要注意服务器配置。
相关推荐
未来之窗软件服务26 分钟前
一体化系统(九)智慧社区综合报表——东方仙盟练气期
大数据·前端·仙盟创梦ide·东方仙盟·东方仙盟一体化
陈天伟教授4 小时前
人工智能训练师认证教程(2)Python os入门教程
前端·数据库·python
信看4 小时前
NMEA-GNSS-RTK 定位html小工具
前端·javascript·html
Tony Bai4 小时前
【API 设计之道】04 字段掩码模式:让前端决定后端返回什么
前端
爱吃大芒果5 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode
苏打水com5 小时前
第十四篇:Day40-42 前端架构设计入门——从“功能实现”到“架构思维”(对标职场“大型项目架构”需求)
前端·架构
king王一帅5 小时前
流式渲染 Incremark、ant-design-x markdown、streammarkdown-vue 全流程方案对比
前端·javascript·人工智能
苏打水com5 小时前
第十八篇:Day52-54 前端跨端开发进阶——从“多端适配”到“跨端统一”(对标职场“全栈化”需求)
前端
Bigger5 小时前
后端拒写接口?前端硬核自救:纯前端实现静态资源下载全链路解析
前端·浏览器·vite