Web前后端交互

前端与后端之间的交互是Web应用程序中至关重要的组成部分,它们通过一系列技术和协议进行数据交换,以实现用户界面与服务器端业务逻辑及数据存储的协同工作。以下是一些常见的交互方式:

### 1. HTTP请求(主要包括AJAX、Fetch API)
- AJAX(Asynchronous JavaScript and XML):前端使用JavaScript(通常借助库如jQuery、axios等)创建异步HTTP请求,无需刷新整个页面即可从后端获取数据或发送数据。AJAX允许在后台与服务器交换数据,使得网页能够局部更新,提供更流畅的用户体验。

示例(使用fetch API):
```javascript

fetch('/api/data')
  .then(response => response.json())
  .then(data => {
    // 更新DOM或执行其他操作
  })
  .catch(error => console.error('Error:', error));


```

- Fetch API:现代浏览器原生提供的更强大、更灵活的请求API,用于替代传统的XHR(XMLHttpRequest)。Fetch API同样支持异步操作,并且可以更好地处理Promise,方便进行错误处理和中间件集成。

### 2. 表单提交
- GET请求:通过HTML表单提交数据时,浏览器默认使用GET方法。表单数据被编码为查询字符串附加在URL后面,适合于简单数据提交或搜索请求。

```html

<form action="/search" method="get">
  <input type="text" name="query" />
  <button type="submit">Search</button>
</form>


```

- POST请求:对于包含敏感信息或大量数据的表单提交,通常使用POST方法。数据以键值对的形式隐藏在请求正文中,不显示在URL上。

```html

<form action="/submit" method="post">
  <!-- 输入字段 -->
  <button type="submit">Submit</button>
</form>


```

### 3. RESTful API
- REST(Representational State Transfer):一种基于HTTP协议的设计风格,用于定义客户端与服务器之间的交互。前端通过发送HTTP动词(GET、POST、PUT、DELETE等)至特定的URL(资源标识符)来操作资源。示例(使用fetch API):
```javascript

// POST请求创建新资源
fetch('/api/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    username: 'newuser',
    email: 'newuser@example.com'
  })
});

// GET请求获取资源列表
fetch('/api/users')
  .then(response => response.json())
  .then(users => {
    // 处理返回的用户列表
  });


```

### 4. WebSocket
- WebSocket:提供全双工、基于TCP的通信协议,允许前端与后端建立持久的、双向的实时通信通道。一旦建立连接,双方可以在任何时候主动发送数据,无需反复发起HTTP请求。```javascript

const socket = new WebSocket('ws://example.com/ws');

socket.addEventListener('open', function (event) {
  socket.send('Hello Server!');
});

socket.addEventListener('message', function (event) {
  console.log('Message from server:', event.data);
});


```

### 5. Server-Sent Events (SSE)
- EventSource:浏览器原生支持的一种轻量级的单向数据推送技术。前端创建一个`EventSource`对象,连接到服务器提供的SSE endpoint,服务器随后可以持续向客户端推送事件数据。

```javascript

const source = new EventSource('/api/stream');
source.onmessage = function(event) {
  console.log('Received data:', event.data);
};


```

### 6. GraphQL
- GraphQL:一种用于API的查询语言,允许客户端精确地描述所需数据,而后端返回匹配结构的数据。前端通过POST请求发送GraphQL查询到指定的API端点。

```javascript

const query = `
  query {
    user(id: "123") {
      name
      email
      posts {
        title
        content
      }
    }
  }
`;

fetch('/graphql', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ query })
})
  .then(response => response.json())
  .then(data => {
    // 处理返回的GraphQL响应数据
  });


```

### 共同要点:

- 接口定义:前端与后端通常会约定一套API接口规范(如OpenAPI、Swagger等),明确请求路径、HTTP方法、请求/响应数据格式(如JSON)、错误处理等,以确保双方对接顺畅。
- 数据交换格式:JSON是最常见的数据交换格式,因其简洁、易于解析且与JavaScript无缝集成。其他格式如XML、protobuf、MsgPack等在特定场景下也可能被使用。
- 认证与授权:交互过程中可能涉及身份验证(如Bearer token、OAuth、JWT等)和权限控制(如RBAC、ACL),确保数据安全。

前端与后端通过上述技术与协议进行交互,实现数据请求、提交、实时更新等功能,共同构建功能完备、响应迅速的Web应用程序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B+tree - B+树深度解析+C语言实现+opencv绘图助解

Btree - B树深度解析C语言实现opencv绘图助解 1. 概述2. Btree介绍3. Btree算法实现3.1 插入分裂 3.2 删除向右借位&#xff08;左旋&#xff09;向左借位&#xff08;右旋&#xff09;合并 3.3 查询和遍历3.3.1 查询3.3.2 遍历 3.4 优化优化1(匀key)优化2(升级key)优化3(拓展兄…

池化整合多元数据库,zData X 一体机助力证券公司IT基础架构革新

引言 近期&#xff0c;云和恩墨 zData X 多元数据库一体机&#xff08;以下简称 zData X&#xff09;在某证券公司的OA、短信和CRM业务系统中成功上线&#xff0c;标志着其IT基础架构完成从集中式存储向池化高性能分布式存储的转变。zData X 成功整合了该证券公司使用的达梦、O…

SEO之链接原理(三)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 &#xff08;接上一篇&#xff09; 4、 Google PR PR是 PageRank 的缩写。Google PR理论是所有基于链接的搜索引擎理论中最有名的。 PR是Google创始人之一拉里佩奇发明…

二维数组打印菱形(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;char arr[5][5] { { , , *, , }, { , *, *, *, },{*, *, *, *, *}, { , *, *, *, …

【基于BP神经网络的多输入分类预测】

文章目录 前言环境准备导入数据划分训练集和测试集数据归一化建立模型设置训练参数训练网络仿真测试数据反归一化和排序性能评价结果可视化混淆矩阵 前言 在数据科学和机器学习领域&#xff0c;对复杂数据集进行高精度的分类预测是一个常见且关键的任务。本文通过MATLAB代码示例…

python3GUI--本地简易音乐播放器By:PyQt5(附下载地址)

文章目录 二&#xff0e;展示1.启动2.添加音乐&播放3.软件风格 三&#xff0e;软件整体功能-览四&#xff0e;实现原理1.界面设计2.音频播放3.打包 五&#xff0e;总结 博客二连发&#xff0c;继续为大家带来我使用PyQt5开发的软件&#xff0c;本次为大家分享我写的一款本地…

MySQL数据库常见SQL语句宝典

一 、常用操作数据库的命令 1.查看所有的数据库 : show databases;2.创建一个数据库 : create database if not exists 数据库名;3.删除一个数据库 : drop database if exists 数据库名;4.选择一张表 (注意在建表之前必须要选择数据库) : use 表名;* --tab 键的上面&#x…

如何我现在是本地的文件路径不是http,用html如何打开

--别给我BB 如何我现在是本地的文件架路径不是http&#xff0c;用html如何打开? 答&#xff1a; 如果你想在HTML中打开本地文件路径的视频&#xff0c;可以使用file://协议。假设你的视频文件在本地的路径为/path/to/your/video.mp4&#xff0c;那么你可以将src属性设置为file…

ULTIMATE VOCAL REMOVER V5 for Mac:专业人声消除软件

ULTIMATE VOCAL REMOVER V5 for Mac是一款专为Mac用户设计的人声消除软件&#xff0c;它凭借强大的功能和卓越的性能&#xff0c;在音乐制作和后期处理领域崭露头角。 ULTIMATE VOCAL REMOVER V5 for Mac v5.6激活版下载 这款软件基于深度神经网络&#xff0c;通过先进的训练模…

关于win11如何打开Hyper-V详解

文章目录 概要一、安装Hyper-V二、启用Hyper-V 概要 我是想要在win11家庭版用docker部署一个&#xff0c;gpt大模型&#xff0c;一开始走了很多弯路&#xff0c;因为要打开Hyper-V&#xff0c;所以我搜集到了一个方法&#xff0c;因为一般win11家庭版的Hyper-v是默认隐藏的&am…

rust前端web开发框架yew使用

构建完整基于 rust 的 web 应用,使用yew框架 trunk 构建、打包、发布 wasm web 应用 安装后会作为一个系统命令&#xff0c;默认有两个特性开启 rustls - 客户端与服务端通信的 tls 库update_check - 用于应用启动时启动更新检查&#xff0c;应用有更新时提示用户更新。nati…

redis基础(一)

启动与关闭 启动命令在/usr/local/bin目录 服务端后台启动&#xff1a;redis-server opt/redis-6.2.1/redis.conf 客户端连接&#xff1a;执行 redis-cli 关闭操作 ​ 方式1&#xff1a;进入终端后关闭 ​ 方式2&#xff1a;直接kill 掉进程 方式3&#xff1a;通过实例关闭 …

C++高级特性:C/C++内存结构模型(十一)

1、内存结构 C/C语言一只被认为是一种底层语言&#xff0c;与其他语言不一样&#xff0c;对内存结构理解是C/C程序员从入门到入土的开端。 其他编程语言对内存管理是透明的&#xff0c;程序员无序关心可以认为是一个黑盒&#xff1b;而C/C不一样理解好内存结构有利于编写健壮性…

碎碎念,最近做了几款小产品...

极简番茄时钟 一款 Mac 版「极简番茄时钟」软件。 知识卡片制作工具 主打简单&#xff0c;同时支持 Markdown 语法。 智能微信助手 让管理变得轻松&#xff0c;沟通更加高效。 感兴趣&#xff0c;欢迎来这里一起交流&#xff0c;限时免费 ~

【软件安装】(十六)双系统Ubuntu22.04引导启动菜单的默认项

一个愿意伫立在巨人肩膀上的农民...... 好学的人总是喜欢在电脑上安装双系统&#xff0c;可是安装好系统之后&#xff0c;就会出现默认启动优先级的苦恼&#xff0c;如果在Bios中设置Windows引导启动为优先启动&#xff0c;那么每次想要进如Ubuntu系统就都需要重新设置Bios。如…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现&#xff0c;通常是ETCD、NACOS、ZOOKEEPER等等&#xff0c;但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式&#xff0c;接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图&#xff1a; Red…

北京半导体展会2024时间(入场时间+闭馆时间)

2024年第二十一届中国国际半导体博览会&#xff08;IC CHINA&#xff09; 时 间&#xff1a;2024 年 9 月 5 一 7 日 地 点&#xff1a;中国北京 北人亦创国际会展中心 作为中国半导体行业协会主办的唯一展览会&#xff0c;自 2003 年起已连续成功举办二十届&#xff0c;是…

ZCT-80零序电流互感器配继电器组合用,电流200/1.5mA JOSEF约瑟

ZCT-80零序电流互感器配继电器组合用,电流200/1.5mA ■ 互感器用于接地保护的装置 ■ 检测零序电流的互感器 ■ 适用于EOCR继电器 功能特点&#xff1a; 专用于剩余电流的检测。 与ELR继电器配合使用。 产品外壳采用ABS阻燃材料&#xff0c;抗干扰能力强&#xff0c;测量…

RFC 6071: IP Security (IPsec) and Internet Key Exchange (IKE) Document Roadmap

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/96882d1fb67b4383bc77c4dd421f7b

Ubuntu中的 Everything 搜索软件 ==> fsearch

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 在 Windows 中&#xff0c;我经常使用 Everything 来进行文件搜索&#xff0c;搜索效率比 Windows 自带的高出千百倍。 那么在 Ubuntu 系统中&#xff0c;有没有类似的软件呢&#xff1f;那必须有&#xff0c;它就是 FSearch 。…
最新文章