我试图用取一个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将数据从浏览器传输到服务器的方法
所以我有一些这样的代码:
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我正在使用以下代码在客户端发出 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
我尝试在本地主机上使用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.
(~~~) 是路径
我在尝试 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)
注意:获取操作在大约 10 秒后失败。
我做了什么:
版本:
操作系统:M1 IOS …
我试图用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)
出于某种原因,我总是深入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它的工作原理: …
我有一些图像将显示在 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) 我正在使用与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时,我看到了不同的结果(没有缓存).我尝试添加随机数作为参数并设置缓存控制标头,但仍返回缓存结果.还有什么我可以尝试的吗?
谢谢
我正在尝试在本地文件中发出请求,但我不知道我何时尝试在计算机上显示错误.是否可以获取项目中的文件?
// 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) fetch-api ×10
javascript ×6
reactjs ×3
fetch ×2
async-await ×1
asynchronous ×1
base64 ×1
blob ×1
es6-promise ×1
express ×1
next.js ×1
next.js13 ×1
react-dom ×1
react-native ×1
react-redux ×1
stream ×1