【发布时间】: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