【问题标题】:Retrieving JSON on server (NodeJs), but keep getting "Unexpected Token U in position 0"在服务器(NodeJs)上检索 JSON,但不断收到“位置 0 中的意外令牌 U”
【发布时间】:2017-02-11 04:57:14
【问题描述】:

所以我已经阅读了一堆关于使用NodeJsExpress 发送和检索JSON 的其他帖子,但我似乎无法让它工作。有人说这是因为JSON 无效。

var arr = { City: 'someplace', Country:Australia};

$.ajax({
    url: '/profile_upload',
    type: 'POST',
    data: JSON.stringify(arr),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    async: true,
    success: function(msg) {
        console.log("THE THING SHOULD've WORKED! " + msg);
    }
});

服务器端代码:

server.post('/profile_upload', function(req, res){
  var value = JSON.parse(req.body);
    console.log("the data sent is: " + value.city);

});

控制台根本没有记录城市,只是因为错误而崩溃。我正在使用 jquery 3.1.1。

【问题讨论】:

  • 控制台您收到的请求以及解析的请求版本并与我们分享,以便我们确保您正确收到请求
  • 从服务器端“req.body”进行 console.logging 时,我得到一个未定义的结果。我仍然不知道解决方案是什么......

标签: jquery json ajax node.js


【解决方案1】:

除非Australia 已在别处定义为变量,否则我将假设它应该是一个字符串;因此,你应该在它周围加上引号:

var arr = { City: "someplace", Country: "Australia" };

单双,无所谓。

更新:

接下来,您不需要解析请求正文。我在服务器端使用 Express 进行了快速测试,以下代码正在运行:

router.post('/profile_upload', (req, res, next) => {
  const value = req.body;
  console.log("the data sent is: " + value.City);
  res.status(200).send({ message: "Success!" });
});

服务器应自动将传入的字符串解析为 JS 对象。我还注意到,在您的原始代码中,City 的密钥在您在请求中发送的对象中大写,但您在路由中没有大写。

作为参考,这是我的客户端代码(有效):

var arr = { City: "someplace", Country: "Australia" }

$.ajax({
  url: '/profile_upload',
  type: 'POST',
  data: JSON.stringify(arr),
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  error: function (err) {
    console.log('oh no:', err);
  },
  success: function (data) {
    console.log('message:', data.message);
  }
});

请注意,由于您已指示 dataType 将是 JSON,因此收到的响应将自动解析为 JS 对象。

【讨论】:

  • 我通过在其周围加上引号将国家/地区值更改为字符串,但我仍然遇到同样的错误。
  • @Lifeislifebutwhatiswhat 我用工作代码更新了我的答案。试一试,看看它是否适合你。
猜你喜欢
  • 2021-12-21
  • 2021-07-01
  • 2020-11-20
  • 2017-10-17
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2020-05-28
相关资源
最近更新 更多