错误:SyntaxError:使用fetch()

时间:2018-04-23 06:03:01

标签: javascript json reactjs

我正在Go Go API服务器和基于React的前端之间发送JSON。我收到以下错误:

错误:SyntaxError:JSON输入的意外结束

据说这是在第25行发生的

.then(response => response.json())

这是相关功能:

postData() {
fetch('stuff/', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name: 'Bob',
    age: 53,
  })
})
.then(response => response.json())
.catch(error => console.error('Error:', error))
.then(response => console.log('Success:', response));
}

在尝试一些故障排除之后,我将错误捕获添加到具有“成功”和“错误”输出的功能,因此它至少会停止弹出错误页面并在API服务器上添加一些控制台输出以查看数据是否是正在通过。

除了发生错误之外,一切似乎都按预期工作。 Go API服务器正在接收json数据,我能够将它解组成一个结构并将数据写入控制台就好了所以我知道数据正在传递。操作的Go端没有抛出任何错误。

我无法解决可能导致错误的原因?寻找有关我如何进一步解决此问题或解决错误的一些建议。

更新:作为Dale建议我已将.then(response => console.log(响应))放入我的代码中。我用这段代码替换了标准.then(response => response.json())。以下是chrome dev工具的控制台截图。

response output

同样值得注意的是,在这种情况下不会弹出错误代码。错误可能与服务器端的代码?下面是POST端点的处理程序

func handlePostTest(w http.ResponseWriter, r *http.Request) {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
    fmt.Print(err.Error())
}
var aPerson Person
json.Unmarshal(body, &aPerson)
fmt.Print(" ", aPerson.Name, " ", aPerson.Age)
}

1 个答案:

答案 0 :(得分:1)

从错误消息和HTTP响应中可以明显看出,如果您正在使用fetch api并从服务器端返回HTTP 200,那么您应该发送一些内容,如"OK",否则它会返回空字符串如果您在响应顶部使用.json(),则会导致错误,因为它不是有效的json。如果您没有发送任何内容,请从服务器端发送HTTP 204(no content)。

因此,对于您的情况,您应该从服务器端发送一些内容。