javascript fetch 用法讲解

2025-05-27 15:50
文章标签 java 讲解 script 用法 fetch

本文主要是介绍javascript fetch 用法讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇...

fetch 的详细讲解

fetch 是一个现代化的 JavaScript API,用于发送网络请求并获取资源。它是浏览器提供的全局方法,可以替代传统的 XMLHttpRequestfetch 支持 Promise,因此更易用且代码更清晰。

1. 基本语法

1.1 语法

fetch(url, options)
  .then(response => response.json())
  .then(data =&gphpt; console.log(data))
  .catch(error => console.error('Error:', error));

参数:

  • url:请求的资源地址。
  • options:可选参数,用于配置请求(如方法、头部信息、请求体等)。

返回值:

  • 一个 Promise,解析为 Response 对象。

1.2 示例:简单 GET 请求

fetch('https://api.example.com/data')
  .then(response => response.json()) // 将响应解析为 JSON
  .then(data => console.log(data))   // 输出解析后的数据
  .catch(error => console.error('Error:', error)); // 捕获请求错误

2. Response 对象

Response 对象表示 fetch 请求的结果,包含以下常用属性和方法:

status:HTTP 状态码。

fetch('https://api.example.com')
  .then(response => {
    console.log(response.status); // 200, 404 等
  });

ok:布尔值,表示请求是否成功(状态码在 200-299 之间)。

fetch('https://api.example.com'http://www.chinasem.cn)
  .then(response => {
    if (response.ok) {
      console.log('Request was successful');
    } else {
      console.error('Request failed');
    }
  });

json():将响应解析为 JSON。

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

text():将响应解析为纯文本。

fetch('https://api.example.com')
  .then(response => response.text())
  .then(data => console.log(data));

headers:响应头部信息。

fetch('https://api.example.com')
  .then(response => {
    console.log(response.headers.get('Content-Type'));
  });

3. 配置请求

fetch 的第二个参数 options 用于配置请求方法、头部信息、请求体等。

3.1 常用配置

选项描述示例值
methodHTTP 请求方法,默认是 GETGET, POST, PUT
headers请求头部信息,用于传递内容类型或认证信息{ 'Content-Type': 'application/json' }
body请求体,用于发送数据(POSTPUT 请求中使用)JSON.stringify({...})
mode请求模式,默认是 corscors, no-cors, same-origin
credentials是否携带凭据,如 cookiessame-origin, include
cache缓存模式default, no-store, reload

3.2 示例:POST 请求

发送一个包含 JSON 数据的 POST 请求:

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

3.3 示例:自定义请求头

向 API 添加身份验证令牌:

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

4. 错误处理

fetch 的 Promise 只有在网络错误时才会拒绝,比如断网或无法解析域名。HTTP 错误状态码(如 404 或 500)不会自动触发 catch

4.1 检查响应状态

需要手动检查 response.okresponse.status

fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }
    return response.json();
  })
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

5. 超时和取消请求

fetch 本身不支持超时或取消请求,可以通过 AbortController 实现。

5.1 设置请求超时

const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 5000); // 5 秒后中止请求
fetch('https://api.example.com/data', { signal: controller.signal })
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => {
    if (error.njavascriptame === 'AbortError') {
      console.error('Fetch aborted!');
    } else {
      console.error('Error:', error);
    }
  });
// 清除超时
clearTimeout(timeoutId);

6. CORS(跨域请求)

如果请求跨域资源,服务端需要设置 Access-Control-Allow-Origin 头部。如果没有配置,浏览器会拒绝跨域请求。

示例:配置 CORS

服务端需要添加类似以下的头部信息:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization

7. 与 Axios 的对比

fetchAxios 都是常用的网络请求工具,但有一些差异:

特性fetchAxios
API 原生支持内置于浏览器,无需安装额外库需要安装第三方库
Promise 支持原生支持原生支持
默认错误处理只处理网络错误,不自动处理 HTTP 错误状态自动抛出 HTTP 错误
自动序列化 JSON需要手动解析响应为 JSON自动解析 JSON 响应
支持取消请求使用 AbortController 实现内置取消功能
灵活性标准化 API,更适合简单场景功能丰富,适合复杂场景

8. 高级用法

8.1 流式响应(ReadableStream)

fetch 可以处理流式响应(比如逐步加载大文件):

fetch('https://api.example.com/stream')
  .then(response => response.body)
  .then(stream => {
    const reader = stream.getReader();
    const decoder = new TextDecoder('utf-8');
    reader.read().then(function processText({ done, value }) {
      if (done) {
www.chinasem.cn        console.log('Stream finished');
        return;
      }
      console.log(decoder.decode(value));
      return reader.read().then(processText);
    });
  });

9. 常见问题

9.1 CORS 错误

  • 浏览器跨域请求时,服务端未正确配置 CORS
  • 解决方案:
    • 服务端设置 Access-Control-Allow-Origin
    • 使用代理服务器避免跨域。

9.2 网络超时

  • fetch 默认没有超时,可以使用 AbortController 设置超时。

9.3 JSON 解析错误

如果 API 返回非 JSON 数据,调用 response.json() 会报错:

fetch('https://api.example.com/data')
  .then(response => response.json())
  .catch(error => consoChina编程le.error('Invalid JSON:', error));

10. 总结

fetch 是一个强大且现代化的网络请求工具,适合大部分 Web 开发场景:

  • 优点:原生支持、Promise API、更清晰的语法。
  • 缺点:错误处理需要手动检查、默认不支持超时和取消。

对于简单场景,fetch 是首选;对于更复杂的场景(如请求超时、丰富的配置需求),可以考虑使用 Axios 等第三方库。

到此这篇关于javascript fetch 讲解的文章就介绍到这了,更多相关javascript fetch内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于javascript fetch 用法讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154802

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映