用 JavaScript 发起 HTTP 请求的几种方法

用 JavaScript 发起 HTTP 请求的几种方法

JavaScript 具有非常棒的模块和方法,可以用来建立可从服务器端资源发送或接收数据的 HTTP 请求。本文会带着大家一起看看在 JavaScript 中常用的建立 HTTP 请求的方式有哪些。

Ajax

Ajax 是最常规的建立异步 HTTP 请求的方式。你可以使用 HTTP POST 方法来发送数据,以及使用 HTTP GET 来接收数据。我们先来看看如何发起一个  GET  请求。这里我会用到一个免费在线的 REST API 工具 JSONPlaceholder,它可以用来给开发者返回随机的 JSON 格式数据。

要在 Ajax 中发起一个 HTTP 调用,你需要初始化一个新的 XMLHttpRequest() 方法,指定 URL 端点和 HTTP 方法(在本例中为 GET)。最后,使用  open()  方法将两者结合起来,并调用  send()  方法执行请求。

我们可以在  XMLHTTPRequest.onreadystatechange  的事件监听器中输出 HTTP 请求结果日志到控制台中,这个事件监听器会在  readystatechanged  事件发生的时候触发。

image-28

const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/posts';
Http.open("GET", url);
Http.send();

Http.onreadystatechange = (e) => {
  console.log(Http.responseText)
}

如果你查看浏览器的控制台,上面的代码会返回一组 JSON 格式的数组数据。但是我们怎么知道请求已经完成了呢?换句话说,我们应该怎样处理 Ajax 的响应数据呢?

onreadystatechange  有两个方式可以让我们可以检测到当前请求的状态,  readyState  和  status

image-29

如果  readyState  等于 4,意味着请求已经完成了。readyState  这个属性可以有 5 种状态值。你可以点击这里了解更多。

除了直接通过 JavaScript 创建 Ajax 调用,还有其他的非常有效的创建 HTTP 调用的方法,比如 jQuery 中的方法  $.Ajax。现在我们就来讨论这些方法。

jQuery 方法

jQuery 有很多可以轻松处理 HTTP 请求的方法。为了能使用到这些方法,你需要在你的项目中引入 jQuery 库。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
$.ajax

jQuery 的 ajax 是发起 HTTP 调用最简单的方法之一。

image-30

$.ajax 方法拥有很多参数,有的是必要的,有的是可选的。它有两个回调选项  success  和  error  ,可以用来处理接收到的响应数据。

$.get 方法

$.get 方法用来执行 GET 请求,它接收两个参数:端点和回调函数。

image-31

$.post

**$.post**  方法是另一种向服务端发送数据的方法,它接收三个参数:url,你想要发送的数据,和一个回调函数。

image-32

$.getJSON

$.getJSON  方法仅用于获取 JSON 格式的数据。它接收两个参数:url  和一个回调函数。

image-33

jQuery 有以上这些方法用来给远端服务器发起请求或者传递数据。不过你最终可以将所有的这些方法都用一个方法来实现:  $.ajax  , 正如下面示例中所看到的那样。

image-34

fetch

fetch  是一个功能强大的新的 web API,它能够让你发起异步的请求。实际上,  fetch  是最好的也是我最喜欢用的发起 HTTP 请求的方式之一。它会返回一个 “Promise”,这也是 ES6 中最强大的特性之一,如果你不是很熟悉 ES6,可以看看这篇文章了解一下。Promise 可以让我们用一种更聪明的方式处理异步请求。让我们来看一下  fetch  从技术上来说是如何工作的。

image-35

fetch  函数接收一个必要参数:端点  URL。在下面的示例中它也有其它的可选参数:

image-36

如你所见,fetch  在创建 HTTP 请求方面有很多优势。你可以从这里了解更多。另外,在 fetch 之上也有一些其他的模块和插件可以让我们给服务端发送请求或者从服务端接收请求,比如axios

Axios

Axios 是一个开源的创建 HTTP 请求的库,它提供了许多好用的特性,让我们来看一看它是如何用的吧。

Usage:

首先,你需要引入 Axios。这里有两种方式将 Axios 引入你的项目。

第一种,你可以使用 npm 进行安装:

npm install axios --save

然后你需要引入它:

import axios from 'axios'

第二种,你可以使用 CDN 来引入 axios:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
使用 axios 创建请求:

基于 Axios,你可以使用  GET  和  POST  来向服务端请求数据和发送数据。

GET:

image-37

axios 需要一个必填参数,当然你也可以提供第二个可选参数。这个示例调用一些数据作简单的查询。

POST:

image-38

Axios  返回一个 “Promise”。如果你对 Promise 比较熟悉的话,你应该知道用 Promise 可以用来执行并行请求。这里你就可以用 axios 在同一时间运行多个并行请求。

image-39

Axios 还提供了一些其他的方法和选项,你可以在这里具体看看。

Angular HttpClient

Angular 有它自己的和 Angular 应用一起运行的 HTTP 模块。它使用到了  RxJS  库来处理异步请求,同时还提供了许多用来执行 HTTP 请求的选择。

使用 Angular HttpClient 来发起一个服务端调用

为了能使用 Angular HttpClient 来发起一个请求,我们需要将代码运行在一个 Angular 应用中。所以我这里就创建了一个。如果你对 Angular 不是很熟悉的话,可以看一下我的文章  20分钟内学会如何创建你的第一个 Angular 应用  。

我们需要做的第一件事儿是在  app.module.ts  中引入  HttpClientModule  模块。

image-40

然后,我们需要创建一个服务来处理请求。你可以使用  Angular CLI  很容易的创建一个服务。

ng g service  FetchdataService

再然后,我们需要在  fetchdataService.ts  服务中的引入 HttpClient 并且将其注入到构造器中。

image-41

在  app.component.ts  文件中引入  fetchdataService

//import
import { FetchdataService } from './fetchdata.service';

最后,调用这个服务并运行。

app.component.ts:

image-42

你可以在  Stackblitz  上看到这整个示例。

总结

我们刚刚了解了在 JavaScript 中最常用的创建 HTTP 请求的几种方式

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

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

相关文章

ElasticSearch、java的四大内置函数式接口、Stream流、parallelStream背后的技术、Optional类

第四周笔记 一、ElasticSearch 1.安装 apt-get install lrzsz adduser -m es 创建用户组&#xff1a; useradd *-m* xiaoming(用户名) *PS&#xff1a;追加参数-m* passwd xiaoming(用户名) passwd xiaoming 输入新的 UNIX 密码&#xff1a; 重新输入新的 UNIX 密码&…

【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法

目录 1 主要内容 节点故障网络拓扑变化示意 约束条件 目标函数 2 部分代码 3 结果一览 4 下载链接 1 主要内容 当前电力系统中微电网逐步成为发展的主力军&#xff0c;微网中包括分布式电源和负荷&#xff0c;单一的微电网是和外部电源进行连接&#xff0c;即保证用电的…

STL —— string(3)

目录 1. 使用 1.1 c_str() 1.2 find() & rfind() 1.3 substr() 1.4 打印网址的协议域名等 1.5 find_first_of() 2. string() 模拟实现 2.1 构造函数的模拟实现 2.2 operator[] 和 iterator 的模拟实现 2.3 push_back() & append() & 的模拟实现 2.4 ins…

海外媒体宣发:商务视频推广数字化变革全解析-华媒舍

在当今数字化时代&#xff0c;商务视频推广正迎来一场革命性的数字化变革。本文将为您解析这场变革的核心元素和相关内容。 商务视频推广 商务视频推广是一种通过视频形式来宣传和推广产品、服务或品牌的方法。传统的推广方式主要是通过文字和图片进行&#xff0c;而商务视频推…

【真题解析】题目 3151: 蓝桥杯2023年第十四届省赛真题-飞机降落【C++ DFS 超详解注释版本】

爆搜冥想 暴力枚举每一辆飞机对于每一个飞机都只存在两种情况&#xff0c;可以降落和不可以降落如果可以降落&#xff0c;计算降落后最早可以降落的时间pre&#xff0c;作为下一次递归的传参如果不可以降落&#xff0c;枚举下一辆飞机 注意这辆的降落有盘旋这种量子叠加态&…

Vant Weapp小程序 van-uploader 文件上传点击无反应,删除无反应

Vant Weapp 1.0 版本开始支持van-uploader组件&#xff0c;请先确认好版本号和引用路径正确&#xff01;&#xff01; <van-uploader file-list"{{ fileList }}" deletable"{{ true }}" />1. 上传无反应 微信小程序用了van-uploader&#xff0c;但是…

无人直播(视频推流)

环境搭建 我这里采用的是ffmpeg来进行推流直播 yum -y install wgetwget --no-check-certificate https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.0.3-64bit-static.tar.xztar -xJf ffmpeg-4.0.3-64bit-static.tar.xzcd ffmpeg-4.0.3-64bit-staticmv ffmpeg /u…

【Linux】线程同步{死锁/线程同步相关接口/由浅入深理解线程同步}

文章目录 1.死锁1.1概念1.2死锁的必要条件 2.线程同步相关接口2.1pthread_cond_init/destroy()2.2int pthread_cond_wait2. 3linux下的条件变量及其作用2.4int pthread_cond_signal/broadcast();2.5Linux下 阻塞和挂起的异同2.6阻塞&#xff0c;挂起&#xff0c;和进程切换的关…

【Flask】Flask项目部署上线

Flask 项目部署上线 1.Gunicorn Gunicorn 是一个纯 Python WSGI 服务器&#xff0c;配置简单&#xff0c;多工作者实现&#xff0c;方便 性能调优。 它倾向于与主机平台轻松集成。 它不支持 Windows &#xff08;但可以在 WSL 上运行&#xff09;。 它很容易安装&#xff0…

Postwoman 安装

Postwoman作为Postman的女朋友&#xff0c;具有免费开源、轻量级、快速且美观等特性&#xff0c;是一款非常好用的API调试工具。能帮助程序员节省时间&#xff0c;提升工作效率。 Github地址&#xff1a;GitHub - hoppscotch/hoppscotch: &#x1f47d; Open source API devel…

【Linux】-Linux下的编辑器Vim的模式命令大全及其自主配置方法

目录 1.简单了解vim 2.vim的模式 2.1命令模式 2.2插入模式 2.3底行模式 3.vim各模式下的命令集 3.1正常&#xff08;命令模式下&#xff09; 3.1.1光标定位命令 3.1.2 复制粘贴 3.1.3 删除 3.1.4 撤销 3.1.5大小写转换 3.1.6替换 「R」&#xff1a;替换光标所到之处的字符&…

鸿蒙(HarmonyOS)Navigation如何实现多场景UI适配?

场景介绍 应用在不同屏幕大小的设备上运行时&#xff0c;往往有不同的UI适配&#xff0c;以聊天应用举例&#xff1a; 在窄屏设备上&#xff0c;联系人和聊天区在多窗口中体现。在宽屏设备上&#xff0c;联系人和聊天区在同一窗口体现。 要做好适配&#xff0c;往往需要开发…

Git相关命令(一)

一、简介 Git 是一个开源的分布式版本控制系统。 当然&#xff0c; git 不会傻傻的把你的每一个版本完整的存储下来&#xff0c;他仅仅会存储每次修改的位置和内容&#xff08;可持久化&#xff09;&#xff0c;每一次 commit 可以理解为产生一个版本&#xff0c;接下来的版本…

数据结构与算法 顺序表的基本运算

一、实验内容 编写一个程序实现&#xff0c;实现顺序表的各种基本运算&#xff08;假设顺序表的元素类型为char&#xff09;&#xff0c;并以此为基础设计一个程序完成下列功能&#xff1a; &#xff08;1&#xff09;初始化顺序表&#xff1b; &#xff08;2&#xff09;采…

开源推荐榜【Sejil一个 .NET带界面的日志管理组件】

Sejil 是一个库&#xff0c;使您能够直接从应用程序捕获、查看和过滤 ASP.net Core 应用程序的日志事件。它支持结构化日志记录、查询以及保存日志事件查询。 开源地址&#xff1a;https://github.com/ZiggyCreatures/FusionCache 使用方法&#xff1a; 安装 Sejil 软件包 do…

鸿蒙HarmonyOS应用开发——跨端迁移

在用户使用设备的过程中&#xff0c;当使用情境发生变化时&#xff08;例如从室内走到户外或者周围有更适合的设备等&#xff09;&#xff0c;之前使用的设备可能已经不适合继续当前的任务&#xff0c;此时&#xff0c;用户可以选择新的设备来继续当前的任务&#xff0c;原设备…

【前端Vue】Vue3+Pinia小兔鲜电商项目第3篇:静态结构搭建和分类实现,1. 整体结构创建【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

v4l2采集视频

Video4Linux2&#xff08;v4l2&#xff09;是用于Linux系统的视频设备驱动框架&#xff0c;它允许用户空间应用程序直接与视频设备&#xff08;如摄像头、视频采集卡等&#xff09;进行交互。 linux系统下一切皆文件&#xff0c;对视频设备的操作就像对文件的操作一样&#xff…

标题:深入了解 JavaScript 中的字符串分割:遇到 / 和 | 都分割

在 JavaScript 中&#xff0c;处理字符串是一项常见的任务。有时候&#xff0c;我们需要将字符串按照特定的字符进行分割&#xff0c;以提取或操作其中的各个部分。在这篇博客中&#xff0c;我们将深入探讨如何使用 JavaScript 的字符串分割功能&#xff0c;特别是当遇到斜杠 /…

汽车后视镜反射率检测光纤光谱仪:安全驾驶的守护神

在汽车的日常使用中&#xff0c;后视镜扮演着至关重要的角色。它不仅帮助驾驶员观察车辆后方的情况&#xff0c;还确保了行车的安全性。然而&#xff0c;由于各种原因&#xff0c;后视镜的反射率可能会降低&#xff0c;从而影响到驾驶员的视线范围和判断能力。为了解决这一问题…