首页 > 其他分享 >Fetch方法——一种简单合理的跨网络异步获取资源方式

Fetch方法——一种简单合理的跨网络异步获取资源方式

时间:2024-01-17 21:16:01浏览次数:27  
标签:origin 异步 console fetch 获取 json Fetch error response

Fetch API是一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。Fetch API提供了一个全局 fetch() 方法,一种简单,合理的来跨网络异步获取资源的方式。

一个基本的 fetch 请求:

fetch("http://localhost:4000/datas.json",{
    method: "POST",                           // *GET, POST, PUT, DELETE, etc.
    mode: "cors",                             // no-cors, *cors, same-origin
    cache: "no-cache",                        // *default, no-cache, reload, force-cache, only-if-cached
    credentials: "same-origin",               // include, *same-origin, omit
    headers: {
      "Content-Type": "application/json",     // 'Content-Type': 'application/x-www-form-urlencoded',
    },
    redirect: "follow",                       // manual, *follow, error
    // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, 
    // same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
    referrerPolicy: "no-referrer", 
    body: JSON.stringify({name: 'apple'}),     // body data 类型必须匹配请求头 "Content-Type" 
  })
  .then((response) => response.json())         //返回一个Promise,即response对象
  .then((data) => console.log(data));

json()方法返回一个 promise,该promise将响应 body 解析成 JSON 。

注意:仅当网络故障或请求被阻止时,从 fetch() 返回的 Promise 才会标记为 reject;当HTTP 状态码在 200 - 299 范围内,resolve 返回值的 ok 属性为 true,否则为 false。

请求添加验证凭据

需要在fetch请求中添加 credentials 属性。

credentials:'include' —— 浏览器发送包含凭据的请求

      'same-origin' —— 只在请求 URL 与调用脚本位于同一起源处时发送凭据

      'omit' —— 浏览器不在请求中包含凭据

例如:

fetch("http://localhost:4000/api/getData", {
    method: "get",
    credentials: "include",
}).then((response) => {
    return response.text();
}).then((data) => {
    console.log(data);
});

发送JSON数据的请求

JSON格式的数据请求与获取:

fetch("http://localhost:4000/api/getData", {
    method: "POST",
    headers: {
        "Content-Type": "application/json",        // 发送json信息,设置Content-Type
    },
    body: JSON.stringify({ username: "example" }),
}).then((response) => {
    return response.json();                        // 把response中的body数据包装到Promise中并返回
}).then((data) => {
    console.log("Success:", data);
}).catch((error) => {
    console.error("Error:", error);
});

 fetch 上传文件

input file 上传文件,FormData() 方法获取文件:

const formData = new FormData();
const files = document.querySelector('input[type="file"][multiple]');

formData.append("title", "My job files");
for (let i = 0; i < files.files.length; i++) {
    formData.append(`files_${i}`, files.files[i]);
}

fetch("http://localhost:4000/api/getData", {
    method: "POST",
    body: formData,
}).then((response) => {
    return response.json();
}).then((result) => {
    console.log("Success:", result);
}).catch((error) => {
    console.error("Error:", error);
});

获取文件

fetch("http://localhost:4000/cats.jpg").then((response) => {
    if (!response.ok) {                                        // 响应状态码非 200 - 299
        throw new Error("Response OK is false.");
    }
    return response.blob();                                    // 获取图片
}).then((myBlob) => {
    document.createElement("img").src = URL.createObjectURL(myBlob);
}).catch((error) => {
    console.error("There has been a problem with fetch:", error);
});

Body 类定义了以下方法获取 body 内容:

  • Request.arrayBuffer() / Response.arrayBuffer()
  • Request.blob() / Response.blob()
  • Request.formData() / Response.formData()
  • Request.json() / Response.json()
  • Request.text() / Response.text()

这些方法都返回一个被解析后的 Promise 对象和数据。

标签:origin,异步,console,fetch,获取,json,Fetch,error,response
From: https://www.cnblogs.com/wuxxblog/p/17966684

相关文章

  • DataGridView DGV 选中事件获取当权选中数据
    1、场景需求,勾选单元格,获取所有当权选中数据;先用第一个单元格修改事件,privatevoiddgvMain_CellEndEdit(objectsender,DataGridViewCellEventArgse){}发现勾选完,光标移走才触发; 实现方法,两个事件;初始化列增加FalseValue=0,TrueValue=1,......
  • Java异步编程详解
    在现代应用程序开发中,异步编程变得越来越重要,特别是在处理I/O密集型任务时。Java提供了一套强大的异步编程工具,使得开发者能够更有效地处理并发任务。本篇博文将深入探讨Java中异步编程的方方面面,通过具体例子详细说明异步编程的实践。异步编程的背景在传统的同步编程模型中,任务......
  • 利用javascript获取并修改伪元素的值
    HEAD中添加style标签强制覆盖初始属性这个方法是利用内部css样式的高优先级来覆盖外部css,好处是简单易理解,实现简单。坏处就是吃相太难看,过于粗暴。varstyle=document.createElement('style');style.innerHTML=".test::before{color:green}";//添加样式内容的话也可以用上面提......
  • SQLserver获取本周、本月、本季、本年、第一天、最后一天
    注:本周第一天为周一、最后一天为周日(七)--本周第一天selectdateadd(WEEK,datediff(WEEK,0,getdate()),0);--本周最后一天selectdateadd(WEEK,datediff(WEEK,0,getdate()),6);--上周第一天selectdateadd(WEEK,datediff(WEEK,0,getdate())-1,0);--上周最后一天select......
  • linux下配置wifi自动获取ip地址
    wpa或者wpa2加密网的wifi操作步骤:1、配置WPA和WPA2加密的WiFi,主要使用wpa_supplicant工具,它被设计成一个运行在后台的守护进程。可以看成两个主要可执行工具:wpa_supplicant:后台运行,相当于服务端。wpa_cli:前端来进行搜索,设置和连接网络,相当于客户端。2、wpa_cli和wpa_supplicant......
  • 使用API接口获取拼多多商品详情
    随着电商行业的快速发展,越来越多的电商平台涌现出来,为消费者提供了丰富的商品选择。拼多多作为国内知名的电商平台之一,拥有庞大的商品库和优惠活动,吸引了大量的用户。本文将详细介绍如何通过调用API接口获取拼多多商品详情,帮助开发者快速实现拼多多商品信息的获取和展示。一、API接......
  • 多个异步请求的执行顺序
    Fn(){ //以下两个都为异步请求 this.getData1() this.getData2()}this.Fn()我以为的执行顺序是:getData1-->getData2但其实,顺序不一定,getData1有时在前,有时在后。解决:加上async和awaitasyncFn(){ //以下两个都为异步请求 awaitthis.getData1() awaitthi......
  • Python 面向对象的私有属性获取
    前言全局说明一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563四、面向对象的私有属性获取4.1.2classFoo:def__init__(self):self.name='wangwu'......
  • Android12以上获取设备网络信号数据
    公司有很多物联网设备,关键的信号参数是RSRP,总有些地方信号差,不适合安装。所以让开发一款测信号的app,用于现场的同事在判定是否符合设备信号条件,再考虑安装设备。由于与开发过程中使用的是Androidsdk33,版本太高,网上搜到的很多旧的方法已经弃用,用起来也比较麻烦。自己捣鼓了半天......
  • Gin GET POST 以及获取GET POST传值
    GinGETPOST以及获取GETPOST传值1Get请求传值packagemainimport( "net/http" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() //http://127.0.0.1:8000/query?username=111&age=10&sex= //{"age":"10&......