JavaScript进阶 - AJAX请求与Fetch API

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
函数计算FC,每月免费额度15元,12个月
简介: 【7月更文挑战第9天】JavaScript进阶:AJAX与Fetch API对比。AJAX用于异步数据交换,XMLHttpRequest API复杂,依赖回调。Fetch API是现代、基于Promise的解决方案,简化请求处理。示例:`fetch('url').then(r => r.json()).then(data => console.log(data)).catch(err => console.error(err))`。注意点包括检查HTTP状态、错误处理、CORS、Cookie和超时。Fetch提高了异步代码的可读性,但需留意潜在问题。

在现代Web开发中,数据的动态加载和与服务器交互是至关重要的。传统的JavaScript通过XMLHttpRequest对象实现这一功能,但这种方法往往显得繁琐且不易于理解。随着技术的发展,Fetch API应运而生,提供了一种更简洁、更现代的方式来处理AJAX请求。本文将深入浅出地介绍AJAX请求与Fetch API的使用,包括常见问题、易错点以及如何避免它们。
image.png

什么是AJAX?

AJAX(Asynchronous JavaScript and XML)是一种无需重新加载整个页面就能与服务器交换数据和更新部分网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新,这意味着可以在不干扰用户操作的情况下更新页面内容。

XMLHttpRequest的局限性

XMLHttpRequest是早期实现AJAX的常用方法,但它有以下局限性:

  1. 复杂的API:XMLHttpRequest的API较为复杂,使用起来容易出错。
  2. 基于回调函数:它通常需要使用回调函数来处理响应,这可能导致代码结构复杂,不易维护。
  3. 不支持Promise:XMLHttpRequest不原生支持Promise,这使得异步代码的管理变得更加困难。

    Fetch API简介

    Fetch API是一个现代的、基于Promise的API,用于在JavaScript中进行网络请求。它提供了更简洁、更易用的方式来处理网络请求和响应。Fetch API返回的是Promise对象,这使得异步操作更加直观和易于管理。

    Fetch API的基本用法

    fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
    
    在上面的示例中,我们首先调用fetch函数,传入请求的URL。fetch返回一个Promise对象,我们使用.then方法处理响应。response.json()也是一个异步操作,它读取响应体并解析为JSON对象。最后,我们使用.catch捕获任何可能发生的错误。

    常见问题与易错点

  4. 忽略HTTP状态码:在使用Fetch API时,应始终检查HTTP状态码。例如,200表示请求成功,而404表示未找到资源。
    fetch('https://api.example.com/data')
    .then(response => {
         
         
     if (!response.ok) {
         
         
       throw new Error('Network response was not ok');
     }
     return response.json();
    })
    // ...后续处理
    
  5. 错误处理:在处理Promise链时,应始终包含.catch块来捕获任何可能发生的错误。
    fetch('https://api.example.com/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
    
  6. 跨域请求问题:当尝试从不同域的服务器请求数据时,可能会遇到CORS(跨源资源共享)问题。确保服务器设置了正确的CORS头部。
  7. 默认不发送Cookie:默认情况下,Fetch API不会发送Cookie。如果需要发送Cookie,需要在请求选项中设置credentials属性。
    fetch('https://api.example.com/data', {
         
         
    credentials: 'include'
    })
    // ...后续处理
    
  8. 请求超时:Fetch API本身不提供请求超时的功能。可以通过包装Promise来实现超时功能。
    function fetchWithTimeout(url, timeout = 3000) {
         
         
    return new Promise((resolve, reject) => {
         
         
     fetch(url)
       .then(resolve)
       .catch(reject);
     setTimeout(() => {
         
         
       reject(new Error('Request timeout'));
     }, timeout);
    });
    }
    fetchWithTimeout('https://api.example.com/data')
    // ...后续处理
    

    总结

    Fetch API为JavaScript中的网络请求提供了一种更现代、更简洁的方法。它基于Promise,使得异步操作更加直观和易于管理。然而,在使用Fetch API时,需要注意检查HTTP状态码、正确处理错误、处理跨域请求问题、发送Cookie以及实现请求超时等常见问题。通过遵循最佳实践,可以更有效地使用Fetch API,提高Web应用的开发效率和用户体验。
相关文章
|
8天前
|
JavaScript 前端开发 API
复习JavaScript中的数组API
这段代码介绍了JavaScript数组的几种实用方法:`fill`用于用固定值覆盖指定范围内的元素;`find`查找符合条件的第一个元素;`findIndex`获取该元素的索引;`sort`对数组排序,需提供比较函数以正确排序数字;结合`slice`与`sort`可在不改动原数组的情况下进行排序;`reverse`反转数组元素;利用`map`可创建新数组并替换其中的特定元素,同时保持原数组不变。
7 1
|
11天前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
4天前
|
开发框架 缓存 .NET
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流
|
5天前
|
存储 JavaScript API
Node.js中的异步API
【8月更文挑战第16天】
12 1
|
8天前
|
XML JavaScript 前端开发
JavaScript中的DOM解析器DOMParser api的讲解
`DOMParser`能将XML或HTML源码字符串解析成DOM `Document`。通过`new DOMParser()`创建实例,使用`.parseFromString(string, type)`方法进行解析,其中`string`为待解析的字符串,`type`指定解析类型如`text/html`或`text/xml`等,返回一个`Document`对象。例如,可解析包含`<p>666</p>`的字符串并获取其文本内容`666`。
13 1
|
3天前
|
JavaScript 前端开发 定位技术
百度地图JavaScript API v2.0创建地图
百度地图JavaScript API v2.0创建地图
6 0
|
7天前
|
JavaScript API
复习总结JS中不熟练的API
复习总结JS中不熟练的API
13 0
|
10天前
|
存储 缓存 安全
Flutter Dio进阶:使用Flutter Dio拦截器实现高效的API请求管理和身份验证刷新
Flutter Dio进阶:使用Flutter Dio拦截器实现高效的API请求管理和身份验证刷新
25 0
|
10天前
|
缓存 JavaScript 前端开发
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)
微信 JS-SDK Demo “分享信息设置” API 及数字签名生成方法(NodeJS版本)更新时间(2020-10-29)
|
4天前
|
机器人 API Python
智能对话机器人(通义版)会话接口API使用Quick Start
本文主要演示了如何使用python脚本快速调用智能对话机器人API接口,在参数获取的部分给出了具体的获取位置截图,这部分容易出错,第一次使用务必仔细参考接入参数获取的位置。