【问题标题】:Request with JSON parameters throwing Uncaught (in promise) Syntax Error带有 JSON 参数的请求抛出 Uncaught (in promise) 语法错误
【发布时间】:2020-09-08 09:54:22
【问题描述】:

我正在使用 Fetch 向我的服务器发出一个发布请求,并且我正在尝试传递一些信息,如下所示。

var rating = document.getElementById("rating");
var ratingValue = rating.innerHTML;
fetch("/films",{
    method: "post",
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    },
    body: JSON.stringify({
        rated : ratingValue
    })
})

当我尝试在我的服务器中访问此信息时,我收到了一个错误:

Uncaught (in promise) SyntaxError: Unexpected token

服务器端代码为:

app.post("/films", function(req,res){
    var rating = req.body.rated;
    ...
})

正是函数中的第一行给了我错误,即声明rating 变量的那一行。

【问题讨论】:

  • 我真的不明白这是怎么发生的,除非您的真实代码与您共享的示例代码不同。您的确切示例代码是否有效?

标签: javascript json express post fetch-api


【解决方案1】:

您的var rating = document.getElementById("rating"); 是一个类似于<div id='rating'>Some text</div> 的html 元素。我不知道rating 元素中的内容或类型,所以这只是一个示例。稍后在您的代码中,您使用 rating 作为

中的键
 body: JSON.stringify({
        rating : ratingValue
 })

所以您尝试按照以下方式创建键:值对

{ "<div id='rating'>Some Text</div>" : ratingValue }

看到错误在位置 0 处显示一个

*2020 年 5 月 25 日更新*

如果 id='rating' 的 html 元素中有一个嵌套元素,那么如果您只想要一个原始值,这可能就是问题所在。

//This would cause a problem as the innerHTML of 'rating' is <p>10</p>
<div id='rating'>
     <p>10</p>
</div>

只要您的 'ratingValue' 需要一个数字,并且 'rating' 的 innerHTML 为 10,下面的示例应该可以工作。您可能需要 parseInt() innerHTML,但不要先尝试。

<div id='rating'>
     10
</div>

这只是一个示例,因为我不知道“评级”ID 附加到什么类型的元素。

【讨论】:

  • 抱歉,我在复制代码时犯了一个错误,即使我使用不同的词作为密钥(正如我现在在上面编辑的代码中所做的那样),我也会返回相同的错误。
  • 好的,我知道你在做什么,确保你的带有评级 ID 的 html 元素中也没有嵌套的 html 元素。生病编辑我的评论来解释。
【解决方案2】:

你不是说req.body.rating吗?

【讨论】:

  • 实际上在发出请求时弄错了标题,请求应该被评为:ratingValue。我已经更正了上面的代码以显示这一点。错误还是一样
  • 你的元素评级里面有什么?
猜你喜欢
  • 1970-01-01
  • 2018-09-02
  • 1970-01-01
  • 2020-10-21
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2021-03-11
相关资源
最近更新 更多