首页 > 其他分享 >AJAX 和 fetch到底是什么

AJAX 和 fetch到底是什么

时间:2024-10-14 09:21:22浏览次数:3  
标签:异步 XMLHttpRequest 到底 xhr AJAX API fetch

文章目录


AJAXfetch 不是完全相同的东西,但它们有一些联系。它们都是用于在网页中实现异步请求的方式,但它们的实现方式和背景有所不同。

1. AJAX 是什么?

AJAX(Asynchronous JavaScript and XML)是一种技术组合,它允许网页在不重新加载整个页面的情况下,与服务器进行数据交换。

  • AJAX 并不是一个具体的函数或API,它是一种概念或技术组合,包括:
    • JavaScript:负责与服务器进行通信。
    • XMLHttpRequest(XHR)对象:最常见的用于发送 HTTP 请求的 API,用来向服务器发送和接收数据。
    • 异步通信:通过非阻塞的方式处理请求和响应。
    • 数据格式:尽管名字里有 XML,但现在 AJAX 主要使用 JSON 格式而不是 XML。
示例:

通过 XMLHttpRequest 实现 AJAX 请求:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data', true); // true 表示异步请求
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText); // 输出响应的数据
    }
};
xhr.send();

2. fetch 是什么?

fetch 是现代 JavaScript 中提供的一个原生 API,用于发起 HTTP 请求。它是用来替代旧的 XMLHttpRequest,提供了更简洁、易用的语法,并且更符合现代 JavaScript 的 Promise 机制。

  • fetch 是浏览器内置的全新 API,它通过返回 Promise 对象简化了异步请求的流程。
  • 它支持更多现代浏览器功能,如 async/await,并且易于扩展和使用。
  • 相比于 XMLHttpRequestfetch 在处理数据时更加简洁,而且语法更加符合现代编程风格。
示例:

通过 fetch 实现同样的 AJAX 请求:

fetch('/api/data')
    .then(response => {
        if (response.ok) {
            return response.json();  // 解析 JSON 响应
        } else {
            throw new Error('Network response was not ok.');
        }
    })
    .then(data => {
        console.log(data);  // 输出数据
    })
    .catch(error => {
        console.error('Fetch error:', error);
    });

3. 区别和联系

  • AJAX 是一个概念,而 fetch 是一种实现 AJAX 的具体方式之一。
  • AJAX 通常使用 XMLHttpRequest 对象,而 fetch 是替代它的现代 API。
  • XMLHttpRequest 处理异步请求时使用回调函数,而 fetch 使用 Promise,这使得代码更加清晰、易读,尤其是结合 async/await 使用时。
  • fetch 对于请求和响应的处理更加简洁,提供了更好的错误处理机制(但它不自动抛出 HTTP 错误,非 200 响应也会被认为是成功的,需要手动检查)。
  • fetch 不能像 XMLHttpRequest 那样实时跟踪请求进度(没有类似 onreadystatechangeprogress 的事件),但可以通过其他 API 来实现文件上传的进度跟踪。

4. 总结:

  • AJAX 是一种概念或技术组合,用来描述通过 JavaScript 异步与服务器通信的技术。
  • fetch 是用于实现 AJAX 的一种现代 API,它提供了更简洁的语法和基于 Promise 的异步处理。
  • fetch 被认为是 XMLHttpRequest 的更现代、更简洁的替代品,虽然两者的功能相似,但 fetch 更符合现代 JavaScript 编程风格。

因此,AJAXfetch 不是同一个东西,但 fetch 是实现 AJAX 的一种现代方法。

标签:异步,XMLHttpRequest,到底,xhr,AJAX,API,fetch
From: https://blog.csdn.net/weixin_65477256/article/details/142886700

相关文章

  • 前端知识整理(全屏播放器 CSS JavaScript 轮转播放 jquery库 AJAX 画布 网页测试)
    currenttime在前端开发中,“currenttime”通常指的是获取用户设备的当前时间。这可以通过JavaScript来实现,下面是一个简单的示例代码,展示如何获取并显示当前时间:<!DOCTYPEhtml><html><head><title>显示当前时间</title></head><body><h1>当前时间:</h1><pid="d......
  • 一文详述:AI 网关与 API 网关到底有什么区别?
    近年来AI发展火热,大模型已经成为推动各行各业业务创新和增长的关键力量。随之而来问题是“企业该如何安全管理和部署AI应用的挑战?”AI基础架构的设计不仅要支持现有的业务需求,还要能够适应未来技术的快速发展。在这样的背景下,AI网关的概念应运而生,AI网关在AI应用的集成、管理和......
  • python中_init_.py 到底有啥用?
     1.__init__.py是个啥?__init__.py,这个文件名就是用来“初始化”的。在Python里,它主要用于标识一个目录是一个“包(Package)”。在项目里新建了一个文件夹,要让它成为一个可供导入的模块包,最简单的办法就是在里面加一个__init__.py。比如,咱们有个项目结构如下:my_project/......
  • Vue3,setup()函数与<script setup>到底有什么本质区别?
    文章目录Vue3中`setup()`函数与`<scriptsetup>`的本质区别一、`setup()`函数的基础理解二、`<scriptsetup>`的基础理解三、`setup()`与`<scriptsetup>`的本质区别四、何时使用`setup()`,何时使用`<scriptsetup>`五、`<scriptsetup>`的一些特殊功能六、......
  • Java中的专有名词——JVM、JRE、JDK到底是什么关系
            相信刚开始学习Java的同学一定见过“JVM、JDK、JRE”这三个专有名词,那他们到底代表的是什么,三者之间又有何种关系呢?        下面我们先来介绍一下三者:1.JVM    JVM:Java虚拟机(JavaVirtualMachine,JVM)是运行Java字节码的虚拟机。JVM有......
  • char类型的-128到底是个神马东西?
    char类型的-128的补码是什么样的?在计算机中,负数通常使用补码形式来表示。对于一个有符号的char类型,其大小为8位(1字节),可以表示从-128到127的整数。-128是有符号8位整数能够表示的最小值。它的二进制补码表示是特殊的,因为它是唯一一个没有正数对应项的负数。在8......
  • datatables使用ajax获取数据
    前端://初始化datatablevartable3=$('.jiaoshi_lst').DataTable({"processing":true,"serverSide":true,"paging":true,"ordering":false,"searching":false......
  • 不用棚拍,不用花钱!一组AI写真到底怎么轻松创作?
    想要一套漂亮的奇幻级别写真但是又不想费力化妆拍照?AI可以为你解决这个问题哦!除了省时省力,甚至还省钱哦!举例,想给一个7岁的女孩用AI生成系列写真1第一步文生图生出你想要的奇幻大片的底图咒语词举例01冰雪奇缘美丽可爱的7岁中国女孩,穿着公主艾尔莎的梦幻淡蓝色连......
  • Ajax面试题:(第二天)
    目录5.http常见状态码有哪些?6.GET和POST的区别,何时使用POST?7.JSON是什么?JSON和JavaScript普通对象有什么区别?如何把JS对象转化为JSON字符串,又如何把JSON字符串转化为JavaScript对象?8.什么是ajax?ajax作用是什么?5.http常见状态码有哪些?小谷来帮你1XX:信息状态码2XX:成......
  • 锐龙7 7800X3D与i7-14700K到底怎么选!其实很简单
    从2022年的锐龙75800X3D到后来的锐龙77800X3D,笔者使用X3D处理器已有2年多的时间。站在自己的立场,我是非常希望游戏老鸟购买这类处理器的,并且也推荐了不少。这里说的是老鸟,也就是比较懂电脑的玩家。但是对于新手玩家而言,3099元的i7-14700K和2999元的锐龙77800X3D摆在面前,该如......