当前位置: 首页 > news >正文

axios平替!用浏览器自带的fetch处理AJAX(兼容表单/JSON/文件上传)

fetch 是啥?

fetch 函数是 JavaScript 中用于发送网络请求的内置 API,可以替代传统的 XMLHttpRequest。它可以发送 HTTP 请求(如 GET、POST 等),并返回一个 Promise,从而简化异步操作
在这里插入图片描述

基本用法

/*
下面是 fetch 的基本语法
url:请求的 URL(必需)
options:一个包含请求配置的对象(可选),如请求方法、请求头、请求体等。
*/
fetch(url, options).then(response => {// 处理响应}).catch(error => {// 处理错误});

常见选项

参数 options 是一个对象,可以包含以下常见属性:

  • method:请求方法,例如 GET、POST、PUT、DELETE 等。默认是 GET。
  • headers:包含请求头的对象,通常用于设置 Content-Type 或授权信息。
  • body:请求体,用于传递数据(POST、PUT 请求时)。
  • mode:请求模式,如 cors、no-cors 和 same-origin。
  • credentials:指示是否发送 cookies,值为 omit(默认不发送)、same-origin(同源发送)或 include(跨域发送)。

GET 示例

fetch('https://api.example.com/data').then(response => {if (!response.ok) {throw new Error('Network response was not ok');}return response.json(); // 将响应解析为 JSON}).then(data => console.log(data)).catch(error => console.error('Fetch error:', error));

POST 示例

fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ name: 'John', age: 30 })
}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Fetch error:', error));

上传文件

const formData = new FormData();
formData.append('file', fileInput.files[0]); // 假设 fileInput 是一个文件输入fetch('https://api.example.com/upload', {method: 'POST',body: formData
}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Fetch error:', error));

封装实例

我们可以将常用的数据交互封装为一个函数,方便调用

/*** 处理 Fetch,如果返回值不符合规范,则报错(可通过 .catch 获取)* @param {*} response* @returns*/
const handleResponse = response=> response.json().then(json=>{if(response.ok && json.success===true)return jsonelsereturn Promise.reject(json)
})/*** 通用 FETCH 交互函数(POST)* @param {String} url - 后端地址* @param {Object} data - 表单数据* @param {Boolean} useJSON - 是否使用 JSON 格式提交* @param {Object} headers - 额外的请求头* @param {Function} handler - 处理函数,默认转换为 JSON 对象*/
window.ajax = (url, data, useJSON=true, headers={}, handler=handleResponse)=>{let body = undefinedif(useJSON){headers['Content-Type'] = 'application/json'body = JSON.stringify(data)}else{if(data){body = new FormData()Object.keys(data).forEach(k=> body.append(k, data[k]))}}return fetch(url, {method:"POST", headers, body}).then(handler)
}

使用示例

ajax("/api", {name:"集成显卡"}).then(d=>console.debug(d))

相关文章:

axios平替!用浏览器自带的fetch处理AJAX(兼容表单/JSON/文件上传)

fetch 是啥? fetch 函数是 JavaScript 中用于发送网络请求的内置 API,可以替代传统的 XMLHttpRequest。它可以发送 HTTP 请求(如 GET、POST 等),并返回一个 Promise,从而简化异步操作 基本用法 /* 下面是…...

【优选算法 — 滑动窗口】水果成篮 找到字符串中所有字母异位词

水果成篮 水果成篮 题目描述 因为只有两个篮子,每个篮子装的水果种类相同,如果从 0 开始摘,则只能摘 0 和 1 两个种类 ; 因为当我们在两个果篮都装有水果的情况下,如果再走到下一颗果树,果树的水果种类…...

Go 数据库查询与结构体映射

下面是关于如何使用 Go 进行数据库查询并映射数据到结构体的教程,重点讲解 结构体字段导出 和 db 标签 的使用。 Go 数据库查询与结构体映射教程 在 Go 中,我们可以使用 database/sql 或 sqlx 等库与数据库进行交互。为了方便地将数据库查询结果映射到结…...

Wi-Fi背后的工作原理与技术发展历程介绍【无线通信小百科】

1个视频说清楚WIFI:频段/历程/技术参数/常用模块 智能手机拥有率越来越高的今天,大家已经习惯了通过无线网络上网的方式。除了在外面需要用手机流量,我们通常在家里或者机场,商场都可以通过Wi-Fi连接上网。本期文章将为大家介绍Wi…...

2024 年(第 7 届)“泰迪杯”数据分析技能赛B 题 特殊医学用途配方食品数据分析 完整代码 结果 可视化分享

一、背景特殊医学用途配方食品简称特医食品,是指为满足进食受限、消化吸收障碍、代谢素乱或者特定疾病状态人群对营养素或者膳食的特殊需要,专门加工配置而成的配方食品,包括0月龄至12月龄的特殊医学用途婴儿配方食品和适用于1岁以上的特殊医…...

STM32学习笔记------编程驱动蜂鸣器实现音乐播放

1. 硬件准备 STM32开发板:STM32F407系列蜂鸣器:常见的蜂鸣器分为两类:有源蜂鸣器和无源蜂鸣器。若使用有源蜂鸣器,只需提供电源和控制信号即可;若使用无源蜂鸣器,则需要控制频率。外接电源(可选…...

ubuntu18.04 安装与卸载NCCL conda环境安装PaddlePaddle

cuda版本11.2 说明PaddlePaddle需要安装NCCL 1、Log in | NVIDIA Developer 登录官网 找到对应版本 官方提供了多种安装方式,本文使用Local installers (x86)本地安装 点击对应的版本下载如: nccl-local-repo-ubuntu1804-2.8.4-cuda11.2_1.0-1_amd6…...

AI有鼻子了,还能远程传输气味,图像生成香水

众所周知,图像、音乐能用AI生成,但出乎意料的是,气味也行。最近,一个名叫Osmo的初创公司宣布,他们成功地将气味数字化了。第一个成功的案例是“新鲜的夏季李子”,而且复现出的味道“闻起来”很不错。整个过…...

学习配置dify过程记录

最近在学习安装 Dify 并集成 Ollama 和 Xinference,学习过程中遇到很多问题,所以我都记录下来。 本人电脑环境:MacBook Pro 15.1系统 基本是基于B站教程一步步搭建: 【Dify快速入门 | 本地部署Dify基于Llama 3.1和OpenAI创建聊天机器人与知…...

简易抽奖器源码以及打包操作

import wx import random import time# 定义Myframe类,继承Frame class Myframe(wx.Frame):# 奖品rewards [桥本香奈, 二代CC, NaNa, 情深叉]# 构造方法def __init__(self):# 父类初始化super().__init__(None, title主界面, size(500, 400), pos(500, 200))# 创建面板&#x…...

一文了解什么是腾讯云开发

一文了解什么是腾讯云开发 关于云开发的猜想腾讯云开发腾讯云开发的优势无服务跨平台轻松托管节约成本 快速上手云开发环境快速搭建管理后台 云开发体验 关于云开发的猜想 说到云开发,作为开发者的大家是否大概就有了想法。比如说过去的开发工作都是在自己本地电脑…...

[CKS] K8S NetworkPolicy Set Up

最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于不安全项目修复的题目。 ​ 专栏其他文章: [CKS] Create/Read/Mount a Secret in K8S-CSDN博客[CKS] Audit Log Policy-CSDN博客 -[CKS] 利用falco进行容器日志捕捉和安全监控-CSDN博客[CKS] K8S Ne…...

【JAVA】Java基础—面向对象编程:构造方法-实现一个Car类,包含多个构造方法,创建不同的汽车对象

在Java中,构造方法则是用于创建对象的特殊方法。通过构造方法,可以在创建对象时初始化其属性。构造方法的重载允许我们根据不同的需求定义多个构造方法,从而灵活地创建对象。 我们可以将汽车的构造方法比作汽车的配置选项。比如,…...

初识网络编程TCP/IP

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程,会出现一堆协议、概念、这层次那技术的,头都大了,还是得总结总结…… 相关名词解释 ✨✨网络…...

快速入门Zookeeper

Zookeeper ZooKeeper作为一个强大的开源分布式协调服务,扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务,用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性,ZooKeeper能够确保在复杂的分布式…...

Filter and Search 筛选和搜索

Goto Data Grid 数据网格 Filter and Search 筛选和搜索 Filter Drop-down Menus (Excel-style) 筛选器下拉菜单(Excel 样式) 要调用列的筛选器下拉菜单,请单击列标题中的筛选器图标。在 “Values” 选项卡中,用户可以从 Data …...

spark的学习-06

SparkSQL读写数据的方式 1)输入Source 方式一:给定读取数据源的类型和地址 spark.read.format("json").load(path) spark.read.format("csv").load(path) spark.read.format("parquet").load(path) 方式二&#xff1a…...

Linux C/C++ Socket 编程

本文目录 Linux C语言 socket 编程 client 端头文件 unistd.h & arpa/inet.h1. **unistd.h**2. **arpa/inet.h** socket() 创建套接字sockaddr_in 结构体inet_pton()connect()send()recv()send() 和 recv() 中的 flags 参数**默认行为(flags 0)的特…...

Flutter错误: uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared

前言 今天要做蓝牙通信的功能,我使用了flutter_reactive_ble这个库,但是在运行的时候发现一下错误 Launching lib/main.dart on AQM AL10 in debug mode... /Users/macbook/Desktop/test/flutter/my_app/android/app/src/debug/AndroidManifest.xml Err…...

Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…...

硬件加速对比:Qwen3-32B镜像在RTX4090D与A100上的OpenClaw表现

硬件加速对比:Qwen3-32B镜像在RTX4090D与A100上的OpenClaw表现 1. 测试背景与实验设计 最近在部署OpenClaw自动化工作流时,遇到了一个实际需求:如何为本地AI智能体选择最具性价比的GPU硬件?我的工作流主要依赖Qwen3-32B模型进行…...

5步快速解锁付费内容:bypass-paywalls-chrome-clean终极指南 [特殊字符]

5步快速解锁付费内容:bypass-paywalls-chrome-clean终极指南 🚀 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的时代,你是否经常遇到优…...

面向对象高级三:内部类 枚举 泛型 java.lang包下常用API

一.内部类1.内部类概述 2.成员内部类(实例内部类)(1)成员内部类可以定义类的一切成员(2)当创建对象时不能直接给内部类创建对象而要先创建外部类的对象 然后new成员内部类的对象(3)在…...

从Windows命令行小白到Scoop社区贡献者:我的完整成长指南

从Windows命令行小白到Scoop社区贡献者:我的完整成长指南 【免费下载链接】Scoop A command-line installer for Windows. 项目地址: https://gitcode.com/gh_mirrors/sc/Scoop 想要在Windows系统上快速安装和管理软件?厌倦了繁琐的图形界面安装过…...

告别macOS原生切换烦恼:alt-tab-macos让窗口管理效率提升300%的终极指南

告别macOS原生切换烦恼:alt-tab-macos让窗口管理效率提升300%的终极指南 【免费下载链接】alt-tab-macos Windows alt-tab on macOS 项目地址: https://gitcode.com/gh_mirrors/al/alt-tab-macos 作为macOS用户,你是否也曾对系统自带的窗口切换功…...

SVG-Edit:开源矢量编辑在浏览器工具中的创新实践

SVG-Edit:开源矢量编辑在浏览器工具中的创新实践 【免费下载链接】svgedit Powerful SVG-Editor for your browser 项目地址: https://gitcode.com/gh_mirrors/sv/svgedit SVG-Edit是一款基于浏览器环境的开源矢量图形编辑工具,提供在线SVG编辑能…...

致远OA任意文件上传漏洞的深度利用与防御策略

致远OA文件上传漏洞的攻防全景解析与企业级防护指南 1. 漏洞背景与影响范围 致远OA作为国内广泛使用的协同办公系统,其安全性直接影响数百万企业的数据资产。近年来曝光的任意文件上传漏洞因其高危害性成为攻击者重点利用目标。该漏洞允许攻击者在未授权情况下上传恶…...

C#实战:基于WebAPI与Modbus构建EMS核心采集服务

1. 为什么需要EMS核心采集服务? 在工业现场,我们经常会遇到几十台甚至上百台智能电表、传感器等设备需要监控。这些设备可能来自不同厂家,使用不同的通信协议,数据格式也各不相同。想象一下,如果每个设备都需要单独开发…...

开源 AI 应用平台实战部署:从零搭建到插件调试避坑指南

1. 开源AI平台部署前的环境准备 在开始部署Dify和AIFlowy之前,环境准备是至关重要的一步。我遇到过不少开发者因为基础环境没配好,导致后续步骤频繁报错的情况。这里分享下Windows和Linux双平台下的实战经验。 对于Dify平台,你需要准备Python…...

3步搞定ERPNext自动化部署:让企业管理系统安装变得简单

3步搞定ERPNext自动化部署:让企业管理系统安装变得简单 【免费下载链接】erpnext_quick_install Unattended install script for ERPNext Versions, 13, 14 and 15 项目地址: https://gitcode.com/gh_mirrors/er/erpnext_quick_install 还在为复杂的ERPNext安…...