标签: fetch-api

不透明响应有哪些限制?

不透明响应被定义为Fetch API的一部分,并表示在未启用CORS时对远程源发出的请求的结果.

关于如何使用不透明的响应(包括JavaScript和页面上的资源)存在哪些实际限制和"陷阱"?

javascript cors service-worker fetch-api

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

fetch(),你如何进行非缓存请求?

fetch('somefile.json'),可以请求从服务器而不是从浏览器缓存中提取文件?

换句话说,有fetch()没有可能绕过浏览器的缓存?

javascript html5 fetch-api

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

fetch:使用JSON错误对象拒绝承诺

我有一个HTTP API,它在成功和失败时返回JSON数据.

示例失败将如下所示:

~ ? http get http://localhost:5000/api/isbn/2266202022 
HTTP/1.1 400 BAD REQUEST
Content-Length: 171
Content-Type: application/json
Server: TornadoServer/4.0

{
    "message": "There was an issue with at least some of the supplied values.", 
    "payload": {
        "isbn": "Could not find match for ISBN."
    }, 
    "type": "validation"
}
Run Code Online (Sandbox Code Playgroud)

我想在JavaScript代码中实现的是这样的:

fetch(url)
  .then((resp) => {
     if (resp.status >= 200 && resp.status < 300) {
       return resp.json();
     } else {
       // This does not work, since the Promise returned by `json()` is never fulfilled
       return Promise.reject(resp.json()); …
Run Code Online (Sandbox Code Playgroud)

javascript promise es6-promise fetch-api

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

使用HTML5 fetch API允许Access-Control-Allow-Origin标头

我正在使用HTML5 fetch API.

var request = new Request('https://davidwalsh.name/demo/arsenal.json');

fetch(request).then(function(response) {
    // Convert to JSON
    return response.json();
}).then(function(j) {
    // Yay, `j` is a JavaScript object
    console.log(JSON.stringify(j));
}).catch(function(error) {
    console.log('Request failed', error)
});
Run Code Online (Sandbox Code Playgroud)

我能够使用普通的json但无法获取上述api url的数据.它抛出错误:

Fetch API无法加载https://davidwalsh.name/demo/arsenal.json.请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" :HTTP //本地主机,因此"是不允许访问.如果不透明响应满足您的需求,请将请求的模式设置为"no-cors"以获取禁用CORS的资源.

html api url fetch-api

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

fetch()不发送头文件?

我从浏览器发送这样的POST请求:

fetch(serverEndpoint, {
    method: 'POST',
    mode: 'no-cors', // this is to prevent browser from sending 'OPTIONS' method request first
    redirect: 'follow',
    headers: new Headers({
            'Content-Type': 'text/plain',
            'X-My-Custom-Header': 'value-v',
            'Authorization': 'Bearer ' + token,
    }),
    body: companyName
})
Run Code Online (Sandbox Code Playgroud)

由当时的请求到达我的后端不包含X-My-Custom-Header也不Authorization头.

我的后端是Firebase的Google Cloud功能(基本上只是Node.js端点),如下所示:

exports.createCompany = functions.https.onRequest((req, res) => {
    let headers = ['Headers: ']
    for (let header in req.headers) {
        headers.push(`${header} : ${req.headers[header]}`)
    }
    console.log(headers)
    ...
}
Run Code Online (Sandbox Code Playgroud)

,谷歌的云计算功能的火力地堡的控制台日志不包含任何X-My-Custom-Header也不Authorization头.

怎么了?


编辑1

因此,使用Chrome中的开发工具检查既没有X-My-Custom-Header也没有Authorization从浏览器发送标题...现在的问题是:为什么?我如何解决它? …

javascript post http cors fetch-api

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

javascript fetch - 无法在'Response'上执行'json':正文流被锁定

当请求状态大于400(我已尝试过400,423,429状态)时,fetch无法读取返回的json内容.浏览器控制台中显示以下错误

未捕获(承诺)TypeError:无法在'Response'上执行'json':正文流被锁定

我显示了返回的响应对象的内容,如下所示:

在此输入图像描述

但几个月前我仍然可以使用它.

我的问题如下:

  • 这只是Chrome浏览器的行为或获取标准的变化吗?
  • 有没有办法获得这些状态的身体内容?

PS:我的浏览器版本是Google Chrome 70.0.3538.102(正式版本)(64位)

javascript fetch-api

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

react fetch给出一个空的响应体

我有一个react/redux应用程序,我正在尝试对服务器执行简单的GET请求:

fetch('http://example.com/api/node', {
  mode: "no-cors",
  method: "GET",
  headers: {
    "Accept": "application/json"
  }
}).then((response) => {
  console.log(response.body); // null
  return dispatch({
    type: "GET_CALL",
    response: response
  });
})
.catch(error => { console.log('request failed', error); });
Run Code Online (Sandbox Code Playgroud)

问题是.then()函数中的响应体是空的,我不知道为什么.我在网上检查了一些例子,看起来我的代码应该可行,所以我显然在这里遗漏了一些东西.问题是,如果我检查Chrome的开发工具中的网络选项卡,则会发出请求并收到我正在寻找的数据.

任何人都可以对这一个发光吗?

编辑:

我尝试转换响应.

使用.text():

fetch('http://example.com/api/node', {
  mode: "no-cors",
  method: "GET",
  headers: {
    "Accept": "application/json"
  }
})
.then(response => response.text())
.then((response) => {
  console.log(response); // returns empty string
  return dispatch({
    type: "GET_CALL",
    response: response
  });
})
.catch(error => { console.log('request failed', error); }); …
Run Code Online (Sandbox Code Playgroud)

javascript fetch-api

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

isomorphic-fetch和fetch有什么区别?

我在这里看到了两个不同的提取:

有人能告诉我两者之间的区别吗?

PS:我已经阅读了README.md,但我仍然没有得到区别.我上次检查时,Isomorphic意味着它具有相似的形式或关系.它对我来说仍然没有意义.

javascript fetch-api isomorphic-fetch-api

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

如何使用Promise.all获取URL数组?

如果我有一个网址数组:

var urls = ['1.txt', '2.txt', '3.txt']; // these text files contain "one", "two", "three", respectively.
Run Code Online (Sandbox Code Playgroud)

我想构建一个如下所示的对象:

var text = ['one', 'two', 'three'];
Run Code Online (Sandbox Code Playgroud)

我一直在努力学习如何做到这一点fetch,这当然会回归Promises.

有些事情我已经试过了工作:

var promises = urls.map(url => fetch(url));
var texts = [];
Promise.all(promises)
  .then(results => {
     results.forEach(result => result.text()).then(t => texts.push(t))
  })
Run Code Online (Sandbox Code Playgroud)

这看起来不对,无论如何它都不起作用 - 我最终没有数组['one','two','three'].

Promise.all在这里使用正确的方法?

javascript promise es6-promise fetch-api

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

使用Fetch APi时如何设置请求标头的内容类型

我正在使用npm'isomorphic-fetch'来发送请求.我遇到的问题是我无法设置请求标头的内容类型.

我设置了application/json的内容类型,但是请求标头被设置为text/plain.

import 'isomorphic-fetch';

  sendRequest(url, method, body) {
    const options = {
      method: method,
      headers:{'content-type': 'application/json'},
      mode: 'no-cors'
    };

    options.body = JSON.stringify(body);

    return fetch(url, options);
  }
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中检查请求时,内容类型是o:

content-type:text/plain;charset=UTF-8
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么我无法设置此属性?

request-headers node.js nodeapi fetch-api isomorphic-fetch-api

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