Ajax

一、什么是 Ajax?

Ajax (Asynchronous JavaScript and XML) 是一种无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。

主要特性:

  • 异步性 (Asynchronous): 可以在不阻塞用户界面的情况下与服务器进行通信。

  • 局部更新 (Partial Updates): 只更新网页的一部分,而不是整个页面,提高了用户体验。

  • 基于标准: Ajax 不是一种新技术,而是几种现有技术的组合,包括JavaScript, XML, HTML, CSS。

二、Ajax 的核心对象:XMLHttpRequest

XMLHttpRequest (XHR) 对象是 Ajax 的核心。它允许浏览器在后台与服务器进行通信。

三、基本语法和步骤 (XMLHttpRequest)

1.创建 XMLHttpRequest 对象:

let xhr;if (window.XMLHttpRequest) {  // 现代浏览器xhr = new XMLHttpRequest();
} else {  // IE6, IE5xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

2.配置请求 (open 方法):

xhr.open(method, url, async, username, password);
  • method: HTTP 请求方法 (GET, POST, PUT, DELETE 等)。通常使用 GET 或 POST。

  • url: 服务器端脚本的 URL。

  • async: (可选) 布尔值,指示请求是否异步执行。 默认为 true(异步)。

  • username: (可选) 用于身份验证的用户名。

  • password: (可选) 用于身份验证的密码。

xhr.open('GET', 'data.txt', true); // 异步 GET 请求
xhr.open('POST', 'submit.php', true); // 异步 POST 请求

3.设置请求头 (可选):

xhr.setRequestHeader(header, value);
  • header: 请求头的名称。

  • value: 请求头的值。

重要: 对于 POST 请求,通常需要设置 Content-Type 请求头。

示例:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 常用于 POST
xhr.setRequestHeader('Content-Type', 'application/json'); //  POST 发送 JSON 数据

 4.发送请求 (send 方法):

xhr.send(body); // body 是要发送的数据

body: (可选) 要发送到服务器的数据。

  • 对于 GET 请求,通常 body 为 null。 数据应该附加到 URL 上(例如:url?param1=value1&param2=value2)。

  • 对于 POST 请求,body 可以是:

    • null (如果没有数据要发送)

    • URL 编码的字符串 (例如:param1=value1&param2=value2)

    • JSON 字符串 (需要设置 Content-Type 为 application/json)

    • FormData 对象 

xhr.send();  // GET 请求,没有数据
xhr.send('name=John&age=30'); // POST 请求,URL 编码的数据
xhr.send(JSON.stringify({name: "John", age: 30}));  // POST 请求,JSON 数据

5.处理服务器响应:

使用 onreadystatechange 事件监听 xhr.readyState 的变化。

xhr.onreadystatechange = function() {if (xhr.readyState === 4) {  // 请求完成if (xhr.status === 200) { // 请求成功// 处理响应数据let responseText = xhr.responseText; // 字符串形式的响应数据let responseXML = xhr.responseXML;  // 如果服务器返回 XML,可以作为 XML 文档访问// 根据你的需求更新页面等console.log("Response: " + responseText);} else {// 处理错误console.error("请求失败,状态码:" + xhr.status);}}
};
  • xhr.readyState: 表示请求的状态。

    • 0: 请求未初始化

    • 1: 服务器连接已建立

    • 2: 请求已接收

    • 3: 请求处理中

    • 4: 请求已完成,且响应已就绪

  • xhr.status: HTTP 状态码。

    • 200: "OK" (成功)

    • 404: "Not Found" (未找到)

    • 500: "Internal Server Error" (服务器内部错误) 等等。

四、示例

 1.完整的 GET 请求例子 

<!DOCTYPE html>
<html>
<head>
<title>简单的 Ajax GET 请求</title>
</head>
<body><button onclick="loadData()">加载数据</button>
<div id="result"></div><script>
function loadData() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};xhr.open("GET", "data.txt", true);xhr.send();
}
</script></body>
</html>

 创建一个名为data.txt的文件,内容例如:Hello, Ajax! This is data loaded from the server.

 2.完整的 POST 请求例子

<!DOCTYPE html>
<html>
<head>
<title>简单的 Ajax GET 请求</title>
</head>
<body><button onclick="loadData()">加载数据</button>
<div id="result"></div><script>
function loadData() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};xhr.open("GET", "data.txt", true);xhr.send();
}
</script></body>
</html>

创建一个名为submit.php的PHP文件(或者其他服务器端语言的文件),例如:

<?php$name = $_POST["name"];echo "你好, " . htmlspecialchars($name) . "!"; // 使用 htmlspecialchars 防止 XSS 攻击
?>

五、使用 FormData 上传文件

FormData 对象提供了一种表示表单数据的键/值对的简单方式,也可以用于上传文件。

<!DOCTYPE html>
<html>
<head>
<title>Ajax 上传文件</title>
</head>
<body><input type="file" id="fileInput"><br><br>
<button onclick="uploadFile()">上传文件</button>
<div id="result"></div><script>
function uploadFile() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};const fileInput = document.getElementById("fileInput");const file = fileInput.files[0];const formData = new FormData();formData.append("file", file); // 添加文件到 FormDataxhr.open("POST", "upload.php", true);xhr.send(formData); // 不需要手动设置 Content-Type,浏览器会自动设置
}
</script></body>
</html>

创建一个名为upload.php的PHP文件(或者其他服务器端语言的文件),例如:

<?php
if (isset($_FILES["file"])) {$file = $_FILES["file"];// 安全起见,你应该进行各种检查,例如文件类型、大小等// 示例:$allowed_types = array("image/jpeg", "image/png", "application/pdf");if (!in_array($file["type"], $allowed_types)) {echo "Error: Invalid file type.";exit;}$upload_dir = "uploads/"; // 确保该目录存在,并且有写入权限$filename = basename($file["name"]); // 获取文件名$target_path = $upload_dir . $filename;if (move_uploaded_file($file["tmp_name"], $target_path)) {echo "文件上传成功!文件名: " . htmlspecialchars($filename);} else {echo "文件上传失败。";}} else {echo "没有文件上传。";
}
?>

Axios

一、什么是 Axios?

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它允许开发者轻松地发送 HTTP 请求(GET、POST、PUT、DELETE 等),并处理服务器返回的响应。

为什么选择 Axios?

  • 基于 Promise: 可以使用 async/await,使异步代码更易于编写和理解。

  • 浏览器和 Node.js 通用: 同样的代码可以在前后端运行。

  • 自动转换 JSON 数据: 自动将请求数据序列化为 JSON,并自动将响应数据反序列化为 JSON。

  • 拦截器: 可以在请求发送前或响应接收后对数据进行处理(例如,添加认证 Token,处理通用错误)。

  • 取消请求: 可以取消正在进行的请求。

  • 客户端支持防止 CSRF: (通过 XSRF-TOKEN)。

  • 文件上传进度: 支持上传和下载进度的监听。

二、如何安装和引入 Axios?

1. 在浏览器环境 (CDN):

直接在 HTML 文件中引入,引入后,axios 对象会全局可用。

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

2. 在 Node.js 或前端项目 (npm/yarn):

npm install axios
# 或者
yarn add axios
import axios from 'axios'; // ES6 模块
// 或者
const axios = require('axios'); // CommonJS 模块

三、Axios 的基本用法和语法

Axios 提供多种方式来发起 HTTP 请求:

1. axios(config) 方法 (通用请求)

这是最通用的方式,通过传入一个配置对象来定义请求。

axios({method: 'post', // 请求方法url: '/user/12345', // 请求 URLdata: { // POST 请求体数据 (会被自动序列化为 JSON)firstName: 'Fred',lastName: 'Flintstone'},headers: { // 请求头'Content-Type': 'application/json','Authorization': 'Bearer YOUR_TOKEN'},timeout: 1000, // 请求超时时间,单位毫秒params: { // GET 请求参数 (会附加到 URL 后)ID: 12345}
})
.then(function (response) {console.log(response.data); // 服务器响应数据console.log(response.status); // HTTP 状态码console.log(response.headers); // 响应头
})
.catch(function (error) {console.error(error); // 请求失败或服务器返回非 2xx 状态码
});

2. 请求方法别名 (GET, POST, PUT, DELETE 等)

Axios 为常见的 HTTP 方法提供了便捷的别名方法。这些方法接受 URL 作为第一个参数,数据作为第二个参数(POST/PUT等),配置作为第三个参数。

GET 请求:axios.get(url, [config])

// 获取用户数据
axios.get('/user?ID=12345').then(response => console.log(response.data)).catch(error => console.error(error));// 或者通过 params 配置
axios.get('/user', {params: {ID: 12345},headers: {'X-Custom-Header': 'foobar'}
})
.then(response => console.log(response.data))
.catch(error => console.error(error));

 DELETE 请求:axios.delete(url, [config])

// 删除用户数据
axios.delete('/user/12345').then(response => console.log(response.data)).catch(error => console.error(error));

 POST 请求:axios.post(url, data, [config])

// 创建新用户
axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'
})
.then(response => console.log(response.data))
.catch(error => console.error(error));// 例如上传 FormData
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('name', 'My Document');axios.post('/upload', formData, {headers: {'Content-Type': 'multipart/form-data' // 对于 FormData,通常浏览器会自动设置,但显式写明也没错}
})
.then(response => console.log(response.data))
.catch(error => console.error(error));

 PUT 请求:axios.put(url, data, [config])

// 更新用户数据
axios.put('/user/12345', {age: 30
})
.then(response => console.log(response.data))
.catch(error => console.error(error));

其他方法:axios.head(url, [config]), axios.options(url, [config])axios.patch(url, data, [config])用法与上述类似。

四、Axios 响应结构

无论请求成功与否,Axios 返回的 Promise 都会解析为一个响应对象。

成功响应 (在 .then() 中收到):

{data: {}, // 服务器提供的响应数据status: 200, // HTTP 状态码statusText: 'OK', // HTTP 状态信息headers: {}, // 响应头config: {}, // 请求配置对象request: {} // 发出请求的 XMLHttpRequest 对象或 http.ClientRequest 实例
}

错误响应 (在 .catch() 中收到):

// error 对象通常包含以下属性:
{message: 'Error message', // 错误消息,例如 "Network Error"name: 'AxiosError', // 错误名称code: 'ERR_BAD_REQUEST', // 错误码,例如 ECONNABORTED (请求超时)config: {}, // 请求配置对象request: {}, // 发出请求的 XMLHttpRequest 或 http.ClientRequest 实例response: { // 如果服务器有响应 (即使是 4xx/5xx 状态码)data: {},status: 404,statusText: 'Not Found',headers: {},config: {},request: {}}
}

区分请求成功和服务器错误:

Axios 默认只将 HTTP 状态码为 2xx 的响应视为成功。其他状态码 (如 4xx, 5xx) 都会被视为错误,进入 .catch() 块。你可以在配置中修改这一行为:

axios.get('/some-data', {validateStatus: function (status) {return status >= 200 && status < 300 || status === 404; // 允许 2xx 或 404 状态码进入 .then()}
})
.then(response => { /* ... */ })
.catch(error => { /* ... */ });

五、Axios 实例 (创建自定义配置的实例)

当你的应用有多个不同配置的 API 地址或请求需求时,创建 Axios 实例非常有用。

const instance = axios.create({baseURL: 'https://some-domain.com/api/', // 基础 URLtimeout: 5000,headers: {'X-Custom-Header': 'foobar'}
});// 使用实例发送请求
instance.get('/user/12345').then(response => console.log(response.data));instance.post('/another-endpoint', {message: 'Hello'
})
.then(response => console.log(response.data));

 所有通过 instance 发送的请求都会继承 instance 的配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87825.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87825.shtml
英文地址,请注明出处:http://en.pswp.cn/web/87825.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#指针:解锁内存操作的底层密码

C#指针&#xff1a;解锁内存操作的底层密码 在 C# 的世界里&#xff0c;我们习惯了托管代码带来的安全与便捷 —— 垃圾回收器自动管理内存&#xff0c;类型系统严格检查数据操作&#xff0c;就像在精心维护的花园中漫步&#xff0c;无需担心杂草与荆棘。但当性能成为关键瓶颈…

永洪科技荣获商业智能品牌影响力奖,全力打造”AI+决策”引擎

近日&#xff0c;在备受业界瞩目的年度商业智能领域权威评选中&#xff0c;永洪科技凭借卓越的技术实力、深度的客户价值创造能力与前瞻的行业洞察&#xff0c;成功斩获“2025商业智能品牌影响力奖”。这一奖项不仅是对永洪科技市场地位与品牌声量的高度认可&#xff0c;更是对…

在SSM+vue项目中上传表单数据和文件

从前端向后端发送multipart/form-data 类型数据&#xff08;主要用于文件上传或表单提交&#xff09;如发送如下信息&#xff1a;前端代码vue文件&#xff1a;&#xff08;配置了服务器代理&#xff09;<template><div class"content"><el-form :mode…

Python 机器学习核心入门与实战进阶 Day 1 - 分类 vs 回归

✅ 今日目标 理解分类&#xff08;Classification&#xff09;与回归&#xff08;Regression&#xff09;的本质区别掌握两种任务的典型使用场景学会根据任务类型选择合适的模型了解每类模型对应的评估指标 &#x1f4d8; 一、监督学习的两大任务类型 任务类型输出结果典型问…

RPC--自定义注解注册发布服务

自定义的三个注解1、RpcReference这个注解用于修饰类的某个字段&#xff0c;表示这个字段是远程调用的引用下面详细解释下这个字段的定义Document表示这个注解应该被javadoc文档工具记录&#xff0c;生成API文档时使用了该注解的地方会被显示出来Retention表示这个注解的声明周…

Web 3D可视化引擎HOOPS Communicator,高效赋能工业级应用开发!

在数字化转型加速的今天&#xff0c;企业面临着前所未有的挑战——如何高效管理跨平台的设计数据、提升团队协作效率&#xff0c;并加快产品上市速度。HOOPS Communicator作为一款高性能的3D可视化与共享平台&#xff0c;凭借其强大的兼容性、先进的3D渲染引擎和无缝的协作功能…

OceanBase数据库迁移工具介绍和部署

OceanBase数据库迁移工具介绍和部署核心组件迁移支持部署要求单节点部署查看日志OceanBase 迁移服务&#xff08;OceanBase Migration Service, OMS&#xff09;是OceanBase数据库提供的一种支持同构或异构数据源与OceanBase数据库之间进行数据交互的服务&#xff0c;具备在线迁…

栈与队列:算法基础的核心差异

理解栈和队列的异同对打好算法基础太重要了&#xff01;它们都是编程和算法中无处不在的线性数据结构&#xff0c;核心区别在于操作数据的顺序。下面我来帮大家清晰梳理它们的异同点&#xff1a;一、相同点都是线性数据结构&#xff1a;数据元素之间逻辑上呈现“一个接一个”的…

HCIA-生成数协议(STP)

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 ​ 本篇笔记是根据B站上的视频教程整理而成&#xff0c;感谢UP主的精彩讲解&#xff01;如果需要了解更多细节&#xff0c;可以参考以下视频&#xf…

基于内网穿透技术的Stable+Diffusion+3.5本地化部署与远程图像生成架构

文章目录 前言1. 本地部署ComfyUI2. 下载 Stable Diffusion3.5 模型3. 演示文生图4. 公网使用Stable Diffusion 3.5 大模型4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 在数字内容创作行业中&#xff0c;利用本地化服务器进行人工智能部署的策略正逐步成为优化制作…

私有云平台实战-OpenStack入门体验

目录 #1.1云计算概述 1.1.1什么是云计算 1.1.2云计算的服务模型 1.1.3OpenStack概述 #2.1OpenStack一键部署 2.1.1在线安装 2.1.2使用本地仓库离线安装 2.1.3创建云主机 1.1云计算概述 云计算是一种基于互联网的计算方式&#xff0c;通过网络将共享的软硬件资源和信息按需提供…

专题:2025即时零售与各类人群消费行为洞察报告|附400+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p42808 即时零售的崛起正在重塑消费市场的时间与空间边界。从清晨的第一杯咖啡到深夜的应急零食&#xff0c;消费者的需求不再受限于传统营业时间。与此同时&#xff0c;不同人群的消费习惯呈现出鲜明差异&#xff0c;Z世代沉迷线上娱…

【一起来学AI大模型】算法核心:数组/哈希表/树/排序/动态规划(LeetCode精练)

以下是五大核心算法的重点解析和LeetCode经典题解&#xff0c;包含最优解法和模板代码&#xff1a;一、数组操作&#xff08;双指针/滑动窗口&#xff09;核心思想&#xff1a;通过索引指针高效遍历与操作数组1. 移动零&#xff08;No.283&#xff09;def moveZeroes(nums):slo…

CSS之基础语法一文全解析

CSS之基础语法一文全解析 一、CSS语法核心结构&#xff1a;选择器声明块1.1 基础语法模板1.2 关键组成部分 二、选择器全解析&#xff1a;精准定位目标元素2.1 基础选择器&#xff08;必掌握&#xff09;2.1.1 标签选择器&#xff08;类型选择器&#xff09;2.1.2 类选择器&…

vue 前端动态导入文件 import.meta.glob 导入图片

背景&#xff1a; 在开发过程中&#xff0c;前端会引入资源文件&#xff0c;这里主要是引入图片。在开发环境&#xff0c;导入的图片显示正常&#xff0c;但是打包部署后&#xff0c;导入的图片就不能正常显示。 原因分析&#xff0c;可能有如下几点&#xff1a; 1.图片不能显示…

RocketMQ-Dashboard页面报Failed to fetch ops home page data错误

今天安装RocketMQ-Dashboard&#xff0c;访问主页&#xff0c;页面弹框提示Failed to fetch ops home page data&#xff0c;F12发现控制台输出网络请求跨域。解决&#xff1a;不要用127.0.0.1访问&#xff0c;用localhost就不报错了

0704-0706上海,又聚上了

上次&#xff0c;还是0413&#xff0c;当时写了一篇&#xff0c;下次相见是何时&#xff1f;也鼓励自己下次相见是找到工作&#xff08;实习也算&#xff09;&#xff0c;没想到真找到了&#xff0c;DW App 说到实习&#xff0c;其实没认真投递很多&#xff0c;互联网公司除了阿…

【win电脑-程序CMD自启动问题-开机就自启动-查找原因-解决方式】

【win电脑-程序CMD自启动问题-开机就自启动-查找原因-解决方式】 1&#xff0c;情况说明&#xff1a;2&#xff0c;问题描述1-这是什么窗口 2-原因分析&#xff1a;3-我的努力-尝试解决&#xff1a;1&#xff0c;任务管理器中查看状态2&#xff0c;查看启动文件夹3&#xff0c;…

Go语言实现双Token登录的思路与实现

Go语言实现双Token登录的思路与实现 引言 在现代Web应用中&#xff0c;身份认证是保障系统安全的重要环节。传统的单Token认证方式存在一些安全隐患&#xff0c;如Token泄露可能导致长期风险。双Token机制&#xff08;Access Token Refresh Token&#xff09;提供了更好的安全…

映射阿里云OSS(对象存储服务)

参考&#xff1a;使用阿里云进行OSS对象存储&#xff08;超详细&#xff09; 一文掌握SpringBoot注解之Component 知识文集(1) ConfigurationProperties注解原理与实战 1.配置属性类 AliOssProperties package com.sky.properties;import lombok.Data; import org.springframe…