Javascript 获得;TypeError:无法获取“文件”;当请求尚未发出时';他没有真正失败

Javascript 获得;TypeError:无法获取“文件”;当请求尚未发出时';他没有真正失败,javascript,get,fetch-api,Javascript,Get,Fetch Api,我正在我的React应用程序中使用。该应用程序部署在服务器上,运行良好。我测试了很多次。但是,突然应用程序停止工作,我不知道为什么。问题是,当我发送一个get请求时,我从服务器接收到一个有效的响应,但是fetch API捕获了一个异常并显示TypeError:failed to fetch。我甚至没有对代码做任何更改,这是所有React组件的问题 我得到了一个有效的答复: 但同时也会出现此错误: 当我删除凭据“include”时,它可以在本地主机上工作,但不能在服务器上工作 我尝试了Stac

我正在我的React应用程序中使用。该应用程序部署在服务器上,运行良好。我测试了很多次。但是,突然应用程序停止工作,我不知道为什么。问题是,当我发送一个
get
请求时,我从服务器接收到一个有效的响应,但是fetch API捕获了一个异常并显示
TypeError:failed to fetch
。我甚至没有对代码做任何更改,这是所有React组件的问题

我得到了一个有效的答复:

但同时也会出现此错误:

当我删除凭据“include”时,它可以在本地主机上工作,但不能在服务器上工作


我尝试了StackOverflow和GitHub上给出的所有解决方案,但都不适合我。

请注意,代码中有一个不相关的问题,但以后可能会困扰您:您应该
返回res.json()
,否则在json解析或您自己的函数处理数据时不会出现任何错误

回到您的错误:您不能有
TypeError:failed to fetch
,请求成功。您可能有另一个请求(检查“网络”面板以查看所有请求)中断并导致记录此错误。此外,也可以检查“保留日志”,以确保面板不会被任何不雅的重定向清除。有时,我碰巧有一个持久的“控制台”面板,以及一个清除的“网络”面板,这导致我在控制台中出现错误,而这实际上与可见的请求无关。你应该检查一下


或者您(但这将是恶意的)在您的最终
.catch
;)中实际有一个硬编码的
console.log('TypeError:failed to fetch')
)实际上,您的
.then()
中存在错误,但这很难让人相信。

问题可能在于您从后端收到的响应。如果它在服务器上工作正常,那么问题可能是响应头。
检查响应标题中的访问控制允许原点(ACAO)。通常react的fetch API会在收到响应后抛出fail to fetch,即使响应头的ACAO和请求的来源不匹配。

我也有类似的问题,因为我是新手,这里有一些事实供大家评论:

我以这种方式将表单数据发送到Google sheet(scriptURL是…,showSuccess()显示的是一个简单的图像):

在Edge my HTML中执行时不显示错误,网络选项卡报告这3个请求: 在Chrome my HTML(index.htm)中执行显示无法获取错误,网络选项卡报告这2个请求: 第二列中的值被阻止:其他,控制台选项卡中也有错误:

得到。。。 net::错误\u被\u客户端阻止\u

为了挂起已安装的Chrome扩展,我在一个匿名窗口中执行了我的代码,没有错误消息,网络选项卡报告这2个请求:


我猜是有什么东西(扩展?)阻止了Chrome阅读请求的答案(GET请求被阻止)。

我知道这是一篇比较老的帖子,但我想分享一下对我有用的东西:
我只是在url中的“localhost”之前输入了“http://”。希望它能帮助一些人。

如果您在本地主机服务器上调用fetch,请使用非SSL,除非您拥有本地主机的有效证书。获取无效或自签名的证书将失败,尤其是在本地主机上。

我知道这个问题可能有特定的原因,但它首先出现在“Typeerror:Failed to fetch”的搜索结果中,我想在这里列出所有可能的原因

Fetch规范列出了从Fetch API引发TypeError的次数:

以下是截至2021年1月的相关段落。这些是课文的摘录

4.6 HTTP网络获取

要使用带有可选凭据标志的请求执行HTTP网络获取,请运行以下步骤:

16并行运行这些步骤:

2.如果中止,则:

3.否则,如果流是可读的,则返回带有TypeError的错误流

要将名称/值名称/值对附加到Headers对象(Headers),请运行以下步骤:

  • 标准化值
  • 如果名称不是名称或值不是值,则抛出TypeError
  • 如果headers的保护是“不可变的”,那么抛出一个TypeError
  • 使用给定对象填充标题对象标题:

    要使用给定的对象对象填充Headers对象标头,请运行以下步骤:

  • 如果对象是序列,则对于对象中的每个标头:
  • 若标题不包含两个项目,则抛出TypeError
  • 方法步骤有时抛出类型错误:

    删除(名称)方法步骤为:

  • 如果名称不是名称,则抛出TypeError
  • 如果这个守护是“不可变的”,那么抛出一个TypeError
  • get(name)方法步骤包括:

  • 如果名称不是名称,则抛出TypeError
  • 返回从此标题列表获取名称的结果
  • has(名称)方法步骤包括:

  • 如果名称不是名称,则抛出TypeError
  • set(name,value)方法步骤如下:

  • 标准化值
  • 如果名称不是名称或值不是值,则抛出TypeError
  • 如果这个守护是“不可变的”,那么抛出一个TypeError
  • 要使用可选的布尔keepalive(默认为false)从对象中提取正文和内容类型值,请运行以下步骤:

    5.打开对象:

    可读流
    如果keepalive为true,则抛出TypeError。
    若对象被干扰或锁定,则抛出一个TypeError

    在“Body mixin”一节中,如果您使用的是FormData,则有几种抛出TypeError的方法。我没有在这里列出它们,因为这会让这个答案很长。有关段落:

    在“请求类”部分中,新的请求
    fetch(url)
    .then(res => res.json())
    .then(data => {
      // do something with data
    })
    .catch(rejected => {
        console.log(rejected);
    });
    
    fetch(scriptURL, {method: 'POST', body: new FormData(form)})
    .then(response => showSuccess())
    .catch(error => alert('Error! ' + error.message))