标签: fetch-api

使用ReadableStream作为请求主体获取

我试图用一个ReadableStream.在这个例子中,ReadableStream应该无限期地重复"Some data ...".

fetch('/', {
  method: 'POST', 
  body: new ReadableStream({
    pull: function(controller) {
      console.log('pull called!');
      controller.enqueue('Some data...');
    }
  })
});
Run Code Online (Sandbox Code Playgroud)

这不起作用.而pull被执行一次,没有数据被请求体中的发送.

POST / HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: 0
Origin: https://example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Accept: */*
Referer: https://example.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Run Code Online (Sandbox Code Playgroud)

如何使用fetch可用的ReadableStream(或任何我可以编写动态数据的流)?

或者,如果这还不可能,请您说明一下吗?谢谢.

注意:这是一个更具体的衍生问题: 通过HTTP将数据从浏览器传输到服务器的方法

stream fetch fetch-api whatwg-streams-api

15
推荐指数
1
解决办法
3330
查看次数

在Fetch API中设置授权标头

我有一个Node/Express后端,我正在使用React Client来使用API​​.我希望能够在用户注册后设置授权标头.这可确保随后的请求与授权标头一起发送.

我可以在这里看到它在Axios中是如何完成的,以及如何在此处获取Fetch中的授权标头

是否可以使用Fetch API执行此操作以及如何执行此操作?

先感谢您.

express reactjs fetch-api

15
推荐指数
4
解决办法
4万
查看次数

Fetch API:如何判断错误是否是网络错误

所以我有一些这样的代码:

async function getData() {
  const response = await fetch(/* ... */);
  const json = await response.json();
  return transform(json);
}
Run Code Online (Sandbox Code Playgroud)

哪里transform可以抛出一些它自己的错误。


我尝试从 API 中捕获网络错误fetch

try {
  const data = await getData();

  // ...
  return // ...
} catch (e) {
  if (isNetworkError(e)) {
    return localStorage.getItem('...');
  }

  throw e;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何实现isNetworkError跨浏览器工作?注意:只有在网络离线时才应返回 true。

似乎 chrome 和 firefox 都会抛出 aTypeError但它们的消息各不相同。

  • 火狐浏览器:TypeError: "NetworkError when attempting to fetch resource."
  • 铬合金:TypeError: Failed to fetch

javascript fetch-api

15
推荐指数
2
解决办法
1万
查看次数

javascript fetch 自动将 http 更改为 https

我正在使用以下代码在客户端发出 fetch 请求:

    var request = new Request(`http://ip:8080/click?url=${value}`, {
        method: 'GET',
        headers: new Headers({
            "Content-Type": "application/json"
        }),
    });
    fetch(request)
Run Code Online (Sandbox Code Playgroud)

但是当浏览器发出请求时,它会自动将URL更改为https协议:

https://ip:8080/click?url=${值}

注:网页有SSL加密

随后,我在网页控制台上收到此错误:无法加载资源:net::ERR_CONNECTION_CLOSED

javascript fetch-api

15
推荐指数
1
解决办法
1万
查看次数

fetch api 无法加载,不支持 url 方案“文件”

我尝试在本地主机上使用fetch,但没有成功。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        fetch("hi.txt").then(function(response){
            response.text().then(function(text){
                alert(text)
            })
        })
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

hi.txt 文件与脚本文件位于同一文件夹中。

控制台中显示以下错误:

index.html:12 Fetch API cannot load file:///C:/~~~~/hi.txt. URL scheme "file" is not supported.

(~~~) 是路径

javascript asynchronous es6-promise fetch-api

15
推荐指数
1
解决办法
4万
查看次数

Next.js 13 - 获取失败错误。我该如何解决这个问题?

我在尝试 Next 13 beta 版本时,遇到了一个奇怪的问题。我想做的是,在服务器端获取数据并将其显示在页面上。但是,“获取”操作在服务器端失败。以下是 Next.js 页面的代码。它位于“app”目录下,如“app/pageName/page.js”

import React from 'react'

async function callApi() {
  const data = await fetch('https://api-psepeti.herokuapp.com/api/items/?search=yil');
  return data.json();
}

export default async function Page() {
  const data = await callApi();
  return (
    <main>
        {data.results && data.results.map((product, index) => (
          <h1>{product.title}</h1>
        ))}
    </main>
  )
}
Run Code Online (Sandbox Code Playgroud)

单击查看错误消息。(UND_ERR_CONNECT_TIMEOUT)

单击查看 API 响应 (Django REST)

点击查看下13文档

注意:获取操作在大约 10 秒后失败。

我做了什么:

  • 我尝试了axios,但也失败了。
  • 我尝试将“enableUndici:true”添加到下一个配置文件中。(失败)
  • 我尝试了其他模拟 API,有些有效,有些无效。(诡异的)
  • 它们在客户端都正常工作。
  • 他们在接下来的12年里都正常工作。
  • 它们在任何其他 React 应用程序上都可以正常工作。

版本:

  • 节点 18.12.0
  • 下一个 13.1.0
  • 反应18.2.0
  • 反应-dom 18.2.0
  • npm 9.2.0

操作系统:M1 IOS …

reactjs fetch-api react-dom next.js next.js13

15
推荐指数
1
解决办法
1万
查看次数

async/await不能与fetch结合使用

我试图用ES7 async/ await一起fetch.我知道我很接近,但我无法让它发挥作用.这是代码:

class Bar {
    async load() {
        let url =  'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
        try {
            response = await fetch(url);
            return response.responseText;
        } catch (e) {
            return e.message;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用如下:

let bar = new Bar();
bar.load().then(function (val) {
    console.log(val);
});
Run Code Online (Sandbox Code Playgroud)

DEMO

出于某种原因,我总是深入catch了解消息

response is not defined
Run Code Online (Sandbox Code Playgroud)

有什么建议我做错了吗?

更新:正如评论中所建议的,它可能是一个问题fetch,所以我尝试了一个简化的(ES5)版本:

<!doctype html>

<html>
    <head>      
        <script>
            var url =  'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
            fetch(url, {method: 'get', mode: 'cors'}).then(function (response) {
                       console.log(response.responseText);
               });
        </script>
    <head>

   <body></body>
<html>
Run Code Online (Sandbox Code Playgroud)

仍然不起作用:(但是,如果我替换fetch它的工作原理: …

javascript async-await fetch-api ecmascript-next

14
推荐指数
1
解决办法
9491
查看次数

请求 blob 图像并使用 fetch API 转换为 base64

我有一些图像将显示在 React 应用程序中。我向服务器执行 GET 请求,该请求以 BLOB 格式返回图像。然后我将这些图像转换为 base64。最后,我在图像标签的 src 属性中设置这些 base64 字符串。

最近我开始使用 Fetch API。我想知道是否有办法在“一次”中进行转换。

下面是一个示例来解释我目前的想法和/或 Fetch API 是否可以实现这一点。我还没有在网上找到任何东西。

  let reader = new window.FileReader();
  fetch('http://localhost:3000/whatever')
  .then(response => response.blob())
  .then(myBlob => reader.readAsDataURL(myBlob))
  .then(myBase64 => {
    imagesString = myBase64
  }).catch(error => {
    //Lalala
  })
Run Code Online (Sandbox Code Playgroud)

javascript base64 blob fetch fetch-api

14
推荐指数
2
解决办法
1万
查看次数

React Native fetch API无法禁用缓存

我正在使用与redux集成的react native expo构建android应用程序.使用fetch方法调用API,但始终显示缓存的结果.服务器第二次没有收到请求.我尝试使用以下代码禁用缓存.

export const mymails = (token) => {
    return fetch(
        API_URL+'?random_number='+ new Date().getTime(), {
        method: 'GET',
        headers: getHeaders(token)
    })  
    .then(response => response.json());
};

getHeaders = (token) => {
    return {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': 'Token token='+token,
        'Cache-Control': 'no-cache, no-store, must-revalidate',
        'Pragma': 'no-cache',
        'Expires': 0
    };
}
Run Code Online (Sandbox Code Playgroud)

当我通过Postman客户端调用API时,我看到了不同的结果(没有缓存).我尝试添加随机数作为参数并设置缓存控制标头,但仍返回缓存结果.还有什么我可以尝试的吗?

谢谢

react-native fetch-api react-redux

14
推荐指数
1
解决办法
3070
查看次数

获取本地文件的请求不起作用

我正在尝试在本地文件中发出请求,但我不知道我何时尝试在计算机上显示错误.是否可以获取项目中的文件?

 // Option 1
 componentDidMount() {
     fetch('./movies.json')
     .then(res => res.json())
     .then((data) => {
        console.log(data)
     });
 }

 error: Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0 at App.js: 10 -->  .then(res => res.json())

 // Option 2
 componentDidMount() {
    fetch('./movies.json', {
       headers : { 
         'Content-Type': 'application/json',
         'Accept': 'application/json'
       }
    })
   .then( res => res.json())
   .then((data) => {
        console.log(data);
   });
 }

 error1: GET http://localhost:3000/movies.json 404 (Not Found) at App.js:15 --> fetch('./movies.json', {
 error2: Uncaught (in promise) SyntaxError: Unexpected token …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs fetch-api

14
推荐指数
5
解决办法
3万
查看次数