Fetch API 与后端交互

news/2025/3/9 10:38:15/文章来源:https://www.cnblogs.com/dgp-zjz/p/18757370

一、Fetch API 

1、什么是 fetch

fetch 是现代浏览器中提供的原生 JavaScript API,用于处理 HTTP 请求。主要特点包括:

  1. Promise-based:

    • fetch 基于 Promise,简化了异步请求的结构,使得代码更加清晰和易于维护
    • 支持 async/await,使得处理异步操作更接近同步代码风格,易读性更好。
  2. 简洁性:

    • API 更简洁,提供的功能更基础(如 GET 和 POST 请求)。
    • 只需要用 native JavaScript 就可以完成,不依赖第三方库。
  3. 灵活性:

    • 返回一个 Response 对象,提供了多种方法来处理响应体数据(如 text()json()blob() 等)。
    • 需要手动处理 JSON 数据解析和 HTTP 错误。
  4. 现代浏览器支持:

    • fetch 受限于现代浏览器,旧版浏览器的支持较差(可以使用 polyfill 来兼容)。
    • 默认不发送 cookies,需要通过 credentials 属性配置。

2、书写格式

fetch(url, options).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);});

参数说明

  • url: 请求的地址,可以是相对或绝对路径。
  • options: 一个包含请求设置的对象(可选)。常见选项包括:
    • method: 请求方法,如 'GET''POST''PUT''DELETE' 等。默认是 'GET'
    • headers: 请求头信息,通常用于发送 JSON 数据。
    • body: 请求主体,通常是一些数据(如 JSON 字符串)需要发送到服务器。

GET请求

fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error('Error:', error));

POST请求

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

使用 async/await

async function fetchData() {try {const response = await fetch('https://api.example.com/data', {method: 'GET',credentials: 'include' // 这行确保请求包含 cookies});if (!response.ok) {throw new Error('Network response was not ok');}const data = await response.json();console.log(data);} catch (error) {console.error('Error:', error);}
}fetchData();

Fetch API 不会自动拒绝 HTTP 错误状态(如 404、500),因此需要手动检查 response.ok 来处理错误。

默认情况下,Fetch 不会发送和接收 cookies,除非设置 credentials 属性(例如 { credentials: 'include' })来包含跨域请求中的 cookies

3、案例

 fetch("{{ url_for('slowlog_analysis.get_mysql_slow_log_stat') }}?period=" + encodeURIComponent(period), {method: 'GET',headers: {'Content-Type': 'application/json'}}).then(response => response.json()).then(data => {$('#loading').hide();if (data.code === 200) {data.data.forEach(item => {aggregatedTable.row.add([item['id'],`${item['start_time']} - ${item['end_time']}`,item['user'],item['avg_query_duration'],item['lock_table_duration'],item['return_rows'],item['scann_rows'],item['count'],item['exec_sql']]).draw();});} else {alert('分析失败: ' + data.error);}}).catch(error => {$('#loading').hide();alert('请求失败: ' + error.message);});

二、AJAX (通过 jQuery)

1、AJAX 介绍

$.ajax() 是 jQuery 提供的方法,属于经典的 AJAX 技术。主要特点包括:

  1. 易用性:

    • 提供了一系列的选项(如 urltypedatasuccesserror 等)来配置请求,非常适合快速搭建应用。
    • 内置强大的功能,例如自动处理 JSON 数据、序列化对象、处理跨域请求(配合 JSONP)等。
  2. 回调机制:

    • 采用回调函数处理请求的成功和失败,代码可能会出现“回调地狱”现象,特别是在需要进行链式多个 AJAX 调用时。
    • jQuery 1.5+ 支持基于 Deferred 的链式调用,但机制相对复杂。
  3. 浏览器兼容性:

    • jQuery 对浏览器兼容性进行了封装,使用 AJAX 提供了一致的接口和行为,不需要担心不同浏览器之间的差异。
  4. 复杂性:

    • 由于 jQuery 的出名和广泛使用,许多项目依赖 jQuery,内置 AJAX 可以无缝使用。
    • 适合处理复杂的 AJAX 请求,提供了对请求流程的细粒度控制。

三、Fetch API  和 AJAX 对比

1、适用场景

fetch :

适合现代项目,尤其是使用 ES6+ 的项目

需要流式处理或更灵活的请求控制时

不需要兼容 IE 或已经使用 polyfill 的项目

ajax :

适合需要兼容旧浏览器(如 IE)的项目。
项目中已经依赖 jQuery 的情况下,使用 ajax 可以保持一致性。
需要快速实现跨域请求(如 JSONP)时。

2、总结

如果需要快速集成到现有使用 jQuery 的项目并且兼容性是一个主要考虑因素,使用 $.ajax() 是合适的选择。

若项目没有 jQuery 依赖,或者你想要利用现代 JavaScript 的特性(如 Promise 和 async/await)开发简洁和易维护的代码,fetch 是更好的选择

 

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

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

相关文章

解决explorer文件丢失黑屏

下载火绒后会把explorer.exe判断为病毒并隔离; 第一种方法可以用任务管理器找到火绒安装路径的bin目录,运行HpsMain进入火绒的隔离区,找到explorer.exe,点击恢复并加入信任区 第二种方法适用于不小心卸载火绒的情况,有的兄弟可能黑屏后直接删除了火绒,但是这种情况火绒会…

烟火烟雾智能检测摄像机安消系统 守护电动车充电桩安全

电动车充电桩烟火检测系统首先通过高清摄像头对停车场或楼宇充电桩区域进行视频采集。这些摄像头通常覆盖广角区域,具备夜视能力,能够在全天候条件下提供高质量的视频输入。采集的视频数据通过图像去噪、亮度校正等预处理步骤,确保算法输入的稳定性和准确性。近年来,随着电…

AI泥石流智能算法摄像头

山体落石滑坡识别系统 落石泥石流监控摄像机基于YOLOX+RNN的深度学习算法,山体落石滑坡识别系统 落石泥石流监控摄像机通过安装在山区公路沿线的监控摄像机来实现对山体的实时监测。这些摄像机分布在关键位置,如山体易滑坡区域、桥梁附近等,能够24小时不间断地捕捉山体的动态…

ApoorvCTF Rust语言逆向实战

上周参加了国外的ApoorvCTF比赛,看一下老外的比赛跟我们有什么不同,然后我根据国内比赛对比发现,他们考点还是很有意思的,反正都是逆向。上周参加了国外的比赛,名称叫:ApoorvCTF 看一下老外的比赛跟我们有什么不同,然后我根据国内比赛对比发现,他们考点还是很有意思的,…

ACK 通过sls收集pod日志

常见的收集方式 filebeat->kafka->logstash->es阿里云ACK日志收集 ack->sls 这里要说的是我们传统意义上是通过收集pod或者node节点上的 .log日志文件进行收集日志,在ack里面可以不用通过收集.log的方式进行日志收集。具体的操作看下面的步骤1 开始操作吧 1.1 ACK…

GreatSQL5.7 与 8.0 对 DATE 非法值处理方式不同

GreatSQL5.7 与 8.0 对 DATE 非法值处理方式不同 一、问题描述 1. 问题现象 当分别通过LOAD DATA LOCAL INFILE和INSERT导入非法的 DATE 字段数据时,在5.7.21和 8.0.25使用LOAD DATA LOCAL会报一个Warning,数据异常但可以插入成功,而且实际插入的数据跟用户计划插入的不同,…

Hyper-V的安装过程自动化程度较高,但要了解每个安装步骤背后的原理

Hyper-V的安装过程确实具有较高的自动化程度,但了解每个安装步骤背后的原理对于确保安装的成功以及后续的维护和管理至关重要。以下是对Hyper-V安装过程中每个关键步骤及其原理的详细解析:一、准备工作 步骤:检查系统要求、备份数据、关闭不必要的程序。 原理: 系统要求:确…

牛客题解 | 拼凑三角形

牛客题库题解题目 题目链接 题解 题目难度:简单 知识点:数学逻辑 思路: 三角形成立的条件:1.为了更简便的判断三角形是否成立,将三个数由小到大进行排序放入a[3]中,只需要满足a[0]+a[1]>a[2]即可。(两个较小的数相加大于第三个数)。 2.若a[0]+a[1]&…

内网环境部署Deepseek+Dify,构建企业私有化AI应用

0.简介 公司为生产安全和保密,内部的服务器不可连接外部网络,为了可以在内网环境下部署,采用的方案为ollama(Docker)+Dify(Docker Compose),方便内网环境下迁移和备份,下文将介绍部署的全部过程。 1.镜像拉取 镜像拉取为准备工作,因服务器在内网环境,需要先在可以连接外…

牛客题解 | 拍照队形

牛客题库题解题目 题目链接 题解 题目难度:简单难度 知识点:数学逻辑 分析:主要考虑输出格式,由于N=3k+1,那么前K行每行输出2个字符,后k+1行输出1个字符。对于前k行,第一行:第一列输出字符,空格数为m=2*k-1,在输出第二个字符;第二行:先空格1,输出字符,空格m-=2个(…

电动后尾门控制器PLGM

经纬恒润平台化的电动尾门控制器PLGM可为不同的后尾门应用场合提供解决方案,目前已为众多客户配套量产。 经纬恒润平台化的电动尾门控制器PLGM(Power Lift Gate Module,PLGM)可为不同的后尾门应用场合提供解决方案,目前已为众多客户配套量产。主要功能车门电动打开…

CentOS 磁盘扩容lvm(虚拟机环境)

fdisk -l 查看磁盘情况对新增加的硬盘进行分区,使用fdisk命令创建和维护分区表。 fdisk /dev/vda 输入p:查看已分区数量(有两个 /dev/vda1 /dev/vda2) 输入n(new partition):新增加一个分区 输入p(parimary partition):分区类型选择为主分区 输入分区号3(partition …