用 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 请求的几种方式

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第44期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

MT6762_联发科MTK6762安卓核心板规格参数

MTK6762核心板是一款集成了蓝牙、fm、wlan和gps模块的高度集成基带平台&#xff0c;为LTE/LTE-A和C2K智能手机应用程序提供支持。该安卓核心板集成了ARM Cortex-A53处理器&#xff0c;工作频率可达2.0GHz&#xff0c;并且还集成了功能强大的多标准视频编解码器。除此之外&#…

汽车电子行业知识:智能汽车电子架构

文章目录 3.智能汽车电子架构3.1.汽车电子概念及发展3.2.汽车电子架构类型3.2.1.博世汽车电子架构3.2.2.联合电子未来汽车电子架构3.2.3.安波福汽车电子架构3.2.4.丰田汽车电子架构3.2.5.华为汽车电子架构 3.智能汽车电子架构 3.1.汽车电子概念及发展 汽车电子是车体汽车电子…

负氧离子监测站:创造健康生活环境

TH-FZ5在蓝天白云之下&#xff0c;那一座座高耸的全彩屏负氧离子监测站&#xff0c;如同一支支科技的绿芽&#xff0c;静静破土而出&#xff0c;为这片土地带来了新的生命力。这些现代化的设备不仅美化了环境&#xff0c;更是我们呼吸健康守护者&#xff0c;它们的存在让我们的…

【排序算法】深入解析快速排序(霍尔法三指针法挖坑法优化随机选key中位数法小区间法非递归版本)

文章目录 &#x1f4dd;快速排序&#x1f320;霍尔法&#x1f309;三指针法&#x1f320;挖坑法✏️优化快速排序 &#x1f320;随机选key&#x1f309;三位数取中 &#x1f320;小区间选择走插入&#xff0c;可以减少90%左右的递归&#x1f309; 快速排序改非递归版本&#x1…

【笔记】OpenHarmony设备开发:搭建开发环境(Ubuntu 20.04,VirtualBox 7.0.14)

参考&#xff1a;搭建开发环境&#xff08;HarmonyOS Device&#xff09; Note&#xff1a;Windows系统虚拟机中Ubuntu系统安装完成后&#xff0c;根据指导完成Ubuntu20.04基础环境配置&#xff08;HarmonyOS Connect 开发工具系列课&#xff09; 系统要求 Windows系统要求&…

OC 技术 苹果内购

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

Springboot 3中,使用jacoco插件生成单元测试覆盖率报告

流水线部署中&#xff0c;单元测试覆盖率是一项考量的基本指标.本文介绍&#xff0c;在springboot3项目中&#xff0c;如何集成jacoco插件&#xff0c;以便在流水线SonarQube 中展示单元测试覆盖率报告. 主要注意的问题&#xff1a; 1.在引用依赖的时候&#xff0c;jmokit的依…

Python基于 BaseHTTPRequestHandler 创建简单Web服务

启动一个最基础的 WEB 服务 创建文件 server.py # Python 3 server example from http.server import BaseHTTPRequestHandler, HTTPServerhostName "localhost" serverPort 8080class MyServer(BaseHTTPRequestHandler):def do_GET(self):self.send_response(20…

哈佛毕业生考公,大材小用?

阅读本文大概需要 1.25 分钟 前段时间一张杭州市余杭区公务员录用名单的截图在网络上疯传&#xff0c;进入公示名单的人中&#xff0c;不乏许多毕业于名校的学生&#xff0c;甚至有些是哈佛毕业的。。。许多人对此感到惊讶&#xff0c;认为连哈佛毕业生都参加公务员考试&#x…

Linux文件和文件夹操作

一、文件操作 功能项命令实例作用文件创建vi /opt/learn/hello.txt 在目录/opt/learn下创建文件hello.txt并进入vi编辑界面 touch /opt/learn/test在目录/opt/learn下创建空白文件testcat > /opt/catfile创建文件catfile并在屏幕上输入内容&#xff0c;最后按 Ctrl D 退出…

压力测试(QPS)及测试工具Locust

压力测试&#xff1a; 通常指的是确定接口或服务能够处理的最大请求量&#xff08;吞吐量&#xff09;和并发用户数&#xff0c;同时保持合理的响应时间和稳定性。 性能目标 最大吞吐量&#xff1a;系统每秒可以处理的请求数。最大并发用户数&#xff1a;系统可以同时支持的…

【学习心得】神经网络知识中的符号解释

这里我对我学到的神经网络知识中&#xff0c;常见的符号做一下记录和总结&#xff0c;方便自己在后面学习中复习。下图二分类识别图像识别猫为例。为了保存一张图片&#xff0c;需要三个矩阵&#xff0c;它们分别对应图片中的红、绿、蓝三种颜色通道&#xff0c;如果图片大小为…

【0278】checkpointer 共享内存(CheckpointerShmem)初始化(3)

0. 关于checkpointer 检查指针是Postgres 9.2的新特性。它处理所有检查点。自上次检查点以来,检查点在经过一定时间后自动分发,并且还可以发出信号来执行请求的检查点。(GUC参数要求每隔这么多WAL段就有一个检查点,这是通过后端在填充WAL段时发出信号来实现的; checkpointer…

ubuntu22.04安装k3s, kuboard

直接安装方式 更新系统包列表 sudo apt update安装所需的依赖 sudo apt install -y curl下载k3s安装脚本 curl -sfL https://get.k3s.io | sh -验证k3s安装 sudo systemctl status k3s获取k3s的token sudo cat /var/lib/rancher/k3s/server/node-token设置kubectl配置 mkdir -p…

Django路由

Router介绍 在实际开发过程中&#xff0c;一个Django项目会包含很多的app,这时候如果我们只在主路由里进行配置就会显得杂乱无章&#xff0c;所以通常会在每个app里&#xff0c;创建各自的urls.py路由模块&#xff0c;然后从根路由出发&#xff0c;将app所属的url请求&#xff…

类与对象上C++

文章目录 一、1.面向过程和面向对象初步认识二、类的定义1.类的两种定义方式 三、类的访问限定符及封装1.访问限定符2.面试题3.封装 四、类对象模型1. 类对象的存储方式猜测2. 结构体内存对齐规则 五、this指针1.this指针的引出2.this指针的特性 六、 C语言和C实现Stack的对比 …

【蓝桥杯3.23小白赛】(详解)

第一题签到题不多说 【二进制王国】 #include <iostream> #include <vector> #include <algorithm> using namespace std;//int Cmp(string s1, string s2)测试了一下时间差确实很明显&#xff0c;还是用下面的内个 int Cmp(const string &s1,const st…

如何快速进行城市内涝模拟?HTWATER软件

原文链接&#xff1a;如何快速进行城市内涝模拟&#xff1f;HTWATER软件https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599079&idx2&sndc6f3da8b17c5587cf5b7766e7019729&chksmfa820200cdf58b16658983ecfbf2b369bff39813302942d6f7eb7b71428c68da71…

在 ubuntu server 22 上安装 Docker 引擎

在 ubuntu server 22 上安装 Docker 引擎 在开始之前&#xff0c;请确保你的系统满足以下条件&#xff1a; 64 位版本的 Ubuntu Mantic 23.10、Ubuntu Jammy 22.04 (LTS) 或 Ubuntu Focal 20.04 (LTS)使用 sudo 或 root 权限 安装步骤 1. 设置 Docker 的 apt 仓库 首先&am…