如何处理来自“不透明”类型的获取响应?

2024-01-24

我正在尝试正确解释对 URL 的 fetch 调用的响应,我认为它是一个 json 字符串。我已经根据这里的类似帖子尝试了许多变体,但没有任何东西可以让我使用有用的数据。这是一种尝试:

fetch('http://serverURL/api/ready/', {method: "POST", mode: "no-cors"})
    .then(function(response) { 
        response.json().then(function(data) {
            console.log('data:' + data);
        });
    })
    .catch(function(err) {
        console.log('Fetch Error :-S', err);
    });

这会在控制台中返回语法错误:

SyntaxError: JSON.parse: 数据在第 1 行第 1 列处意外结束 JSON 数据

所以也许它不是 JSON...如果我在 console.log 行上放置一个断点,并将鼠标悬停在响应上(上面的行),我会看到带有各种字段的响应对象(?):

不知道如何解释...status:0 表明它没有得到有效的响应。但是,如果我检查开发人员工具中的“网络”选项卡,然后单击获取行,则状态为 200,并且“响应窗口/JSON”部分显示消息信息,如果您只是将 URL 放入浏览器 URL,您也会看到该信息直接吧。 “响应负载”部分也是如此,它显示了 JSON 字符串:

{"msg": "API 已准备就绪。", "success": true}

所以...它看起来像 json,不是吗?但是 fetch 无法将其作为 json 获取?

这是另一种变体,但使用response.text()而不是response.json()

fetch('http://serverURL/api/ready/', {method: "POST", mode: "no-cors"})
    .then((response) => {
        console.log(response);
        response.text().then((data) => {
            console.log("data:" + data);
    });
});

这会在控制台中打印响应对象(与上面相同:ok: false、status:0、type:opaque 等)。第二个 console.log 文件在 data: 之后不打印任何内容。如果我使用response.json,我会再次收到有关数据结尾的语法错误,如上所述。

有任何想法吗?我意识到服务器可能无法提供 fetch 需要或想要的内容,但是,它确实提供了一些信息(至少在直接在浏览器中使用 URL 时),这就是我需要处理的信息,如 json 或文本或其他内容。


本质上,你cannot从不透明请求访问响应正文。

添加模式:“no-cors”不会神奇地让事情发挥作用。浏览器通过 默认阻止前端代码跨域访问资源。如果 站点在其响应中发送 Access-Control-Allow-Origin,然后 浏览器将放松这种阻止并允许您的代码访问 回复。

但是,如果站点不发送 Access-Control-Allow-Origin 标头 它的响应,那么你的前端 JavaScript 代码就无法 直接访问该网站的回复。特别是,指定 模式:“no-cors”不会解决这个问题(事实上它只会让事情变得更糟)。

From https://stackoverflow.com/a/43268098/1666071 https://stackoverflow.com/a/43268098/1666071

还有来自fetch文档:

no-cors — 防止方法为 HEAD、GET 以外的任何方法 或 POST,并且标头不是简单的 标头。如果任何 ServiceWorkers 拦截这些请求,他们可能不会 添加或覆盖除简单标头之外的任何标头。此外,JavaScript 可能无法访问结果的任何属性 回复。这确保了 ServiceWorkers 不会影响语义 网络并防止因以下原因引起的安全和隐私问题 跨域泄露数据。

https://developer.mozilla.org/en-US/docs/Web/API/Request/mode https://developer.mozilla.org/en-US/docs/Web/API/Request/mode

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理来自“不透明”类型的获取响应? 的相关文章

随机推荐

  • 如何使用 CSS 和 JavaScript 制作可更改的主题

    我对 CSS 和 JavaScript 还很陌生 我想知道您是否可以制作一个脚本来更改网站使用的样式表 说 你有一个绿色主题 所有东西都是绿色的 您会怎么做 以便用户可以通过按下按钮将其更改为红色 有谁知道如何做到这一点 您可以为链接标签设
  • 创建游戏插件时出现 SerpentAI 错误

    我最近安装了 SerpentAI 但在创建游戏插件时遇到了问题 运行命令时 serpent generate game 我提供以下答案 RaftWars 网页浏览器 What is the name of the game Titleize
  • 如何将跟踪信息保存到文件中

    我正在通过启用跟踪来跟踪我的 ASPX 页面web config
  • 何时对片段使用 onCreateView?

    我正在按照以下步骤操作 http developer android com training basics fragments creating html AddInLayout http developer android com tr
  • “Image Literal”命令在 Xcode 中不起作用

    我开始学习 swift 语言 有一个命令 Image Literal 可以添加图像 但它没有显示任何内容 除此之外 如果我尝试任何其他编码 它会自动得到建议 但图像文字根本不起作用 我正在使用 Xcode 13 任何线索都会非常有帮助 对于
  • Blazor客户端发送电子邮件

    我在 Razor 页面中包含了一个联系表单 以便用户可以在其中填写他的电子邮件 主题和正文 当他提交时 电子邮件会发送到我的电子邮件地址 我的代码看起来像这样example https learn microsoft com fr fr d
  • 为什么 C++11 允许 GC? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Swift - 查找字符串中两个位置之间的子字符串

    我有一个格式如下的字符串 XbfdASF FBACasc Piida bfedsSA XbbnSF vsdfAs 基本上它是一个 ID ID 然后又重复 我有第一个 ID 我需要找到它的合作伙伴示例 我有 Piida 我需要找到 之后紧随其
  • php 中的 mkdir() 将文件夹权限设置为 755 但我需要 777?

    我试图使用 php 在我的服务器上创建一个文件夹 当我将其设置为 0777 时 它显示为 755 mkdir create path 0777 谢谢 尝试这个 old umask umask 0 mkdir create path 0777
  • MongoDB $lookup 对带有引用 objectId 的对象数组进行查找

    我有订单集合 我正在从中获取数据 如下所示 id 628216b7b30bb8aa80c8fd1a promotionsDetails companyTotalPrice 27 promotionsData id 621de063bb5f9
  • 如何从函数标记的页面源代码中获取值?

    这是源代码中的函数 function dosubmit if getObj Frm Username value getObj errmsg innerHTML Username cannot be empty getObj myLayer
  • Android 互联网连接检查更好的方法

    根据 Android 开发者网站 确定和监控连接状态 https developer android com training monitoring device state connectivity monitoring html 我们可
  • ggplot2:scale_alpha() 的阈值

    是否可以指定色标的阈值 看这个例子 xy lt expand grid x 1 20 y 1 20 xyd lt data frame xy z runif 400 a rowSums xy 40 g lt ggplot xyd aes x
  • SharePoint 2007:如何限制字段级别的访问?

    是否可以在 SharePoint 2007 列表 MOSS 尽管我不认为这是企业版 中允许一个 SharePoint 组中的用户编辑某些字段中的值 而另一组中的用户编辑其他字段中的值 从我所做的所有搜索来看 这似乎是不可能的 因此作为后备
  • 当我们使用核心数据时,我们应该创建模型类吗?

    我正在开发一个 iPad 应用程序 如果用户无法访问互联网 则需要我在本地存储数据 然后与后端数据库同步 对于本地存储 我计划将 Core Data 与 SQLite 结合使用 我第一次使用 Core Data 它似乎检索实体并以字典的形式
  • 我需要一种人类可读且可解析的文档格式

    我正在从事其中一个项目 其中有一百万种更好的方法来完成我所需要的 但我别无选择 我必须这样做 这里是 有一个网络表单 当用户填写并点击提交时 将使用表单数据创建人类可读的文本文件 它看起来像这样 field 1 value for fiel
  • 将文件上传到 Google Cloud Storage:500 后端错误

    我们尝试将文件上传到 Google Cloud Storage 然后再将其移至 BigQuery 但在某些上传过程中 我们经常遇到 500 内部服务器错误 或 410 消失 原始消息如下 我们使用的是官方 SDK 并添加了指数退避重试 但错
  • - 声明时变量的默认值 -

    我想知道在初始化变量之前变量的默认值是什么 例如 如果我这样做 myClass h BOOL myBOOL default value NSArray myArray default value NSUInteger myInteger d
  • Angular - 单击时更改 Font Awesome 图标颜色

    我使用以下 HTML 创建了一个名为 like 的组件 div i class fas fa heart i div 当我单击图标时 它应该更改变量 isActive 因此图标的颜色也应该改变 这是 ts onClick this isAc
  • 如何处理来自“不透明”类型的获取响应?

    我正在尝试正确解释对 URL 的 fetch 调用的响应 我认为它是一个 json 字符串 我已经根据这里的类似帖子尝试了许多变体 但没有任何东西可以让我使用有用的数据 这是一种尝试 fetch http serverURL api rea