【问题标题】:Extra quotes in response.text()response.text() 中的额外引号
【发布时间】:2017-09-11 02:13:25
【问题描述】:

在我的 React/Redux 应用程序中,我调用了返回文本响应的后端 API。然后我使用以下行来检索文本。我看到的问题是我的代码似乎在我收到的文本周围加上了两组引号。

所以,我的 API 返回 Hello World! 但在下面的代码中它变成了 ""Hello World!""

我的 API 确实返回了一个字符串,因此文本周围总会有一组引号,例如 "Hello World!",这非常好。我只是不明白为什么我会得到两组报价。

知道为什么吗?

export const callApi = (request) => {
    return (dispatch) => fetch('/api/getsometext', fetchOptionsPost(request))
        .then((response) => {
            if(!response.ok) {
                // Request failed
                dispatch(setBadRequest(true))
            } else {
                const myText = response.text() // This is where I'm getting double quotes
                .then((myText) => dispatch(setMyText(myText)))
            }
        })
}

【问题讨论】:

  • 我首先在我的应用程序的 UI 中注意到了它们。然后我开始调查它,看起来它们首先出现在我在原始帖子的代码中标记它的位置。我还检查了我的 API 是否是这样发送的,并确认 API 只是返回简单的文本,周围没有额外的引号。
  • 我的 API 确实返回了一个字符串,因此文本周围总会有一组引号,例如“Hello World!” Response.text() 不应在全部。
  • 这就是我要说的。当您检查某些文本时,您总是会在引号中看到它,这表明它是一个字符串值。实际上,没有双引号。它只是以这种方式表示。当我检查从 API 获得的文本时,即response.text() 行,这就是我看到两组双引号的地方。换句话说,response.text() 似乎将文本用引号括起来。当我的应用向用户显示文本时,最终结果是 "Hello World!" 只是一组双引号。因此,有些东西将从 API 接收到的文本用双引号括起来。
  • 您的网络面板的响应选项卡中有什么?另外,如果你做response.blob().then(b=>{reader=new FileReader(); reader.onload = e=> dispatch(setMyText(reader.result); reader.readAsText(b);}),你会得到什么结果?你确定它不在setMyText 函数中吗?您可以在许多浏览器或仅一种浏览器中重现它吗? xhr 也会发生这种情况吗?
  • 这是正常的。 不,在此面板中,您应该会看到不带引号的原始响应。这意味着您的服务器使用这些引号发送数据,可能是因为它认为它应该将其作为 JSON 发送。因此,要么重新配置您的 API,使其不会尝试将其作为 JSON 发送,要么只需使用 Response.JSON() 以便您的客户端正确解析它。

标签: javascript redux


【解决方案1】:

只需引用@Kaiido 的提示作为答案,这样我就不会迷失在 cmets 中:

您的服务器发送带有这些引号的数据,可能是因为它 认为它应该作为 JSON 发送。所以要么重新配置你的API,所以它 不尝试将其作为 JSON 发送,要么简单地使用 Response.JSON() 所以 确保您的客户端正确解析它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多