JSON空数组项消失

3

我定义了一个JSON,并将其发送到后端(Node.js)。

var imj = {};
imj.images = [];
$.post("/image/uploadImages", imj, function(feedback){
.....

然而,后端收到的是:
{}

"images"条目消失了。

以下是后端代码:

exports.uploadImages = function(req, res) {
    if (typeof req.body.images == 'undefined') {
        return res.json({
            code: 1,
            message: "parameter incomplete"
        })
    }
    .....

因此,后端返回了错误信息 {code:1, message:'参数不完整'}。

有人知道为什么吗?如果我想让后端接收这个空数组,我该怎么做呢?


看起来你正在将图片作为空数组 img.images = [] 发布。这背后是否有什么原因?可能是因为我在代码中没有看到你向数组分配任何图像,所以它是空的。 - Jeremy Rajan
@JeremyRajan 我想要上传图片,但有时候用户并不会上传图片。为了代码整洁,我会将其上传,无论用户是否上传图片。 - Kingston Chan
@KingstonChan,你能发布一个Fiddle供我们检查吗? - Jeremy Rajan
后端代码处理响应是什么? - Miguel Mota
@Moogs 我已经编辑了问题,添加了后端代码的一部分以及它的响应。 - Kingston Chan
@JeremyRajan 问题在于前端发布的内容和后端接收到的内容不一致。我认为 Fiddle 无法向您显示此问题。 - Kingston Chan
2个回答

0

$.post 发送的是 URL 编码数据,因此您需要使用 $.ajax 并指定内容类型以及对数据进行 JSON 字符串化。

var data = {};
data.images = [];

$.ajax({
    url: '/image/uploadImages', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify(data)
}).done(function(data) {
  console.log(data); // { images: [] }
});

在服务器端,请确保使用一个 body parser。
var app = require('express')();
var bodyParser = require('body-parser');

app.use(bodyParser.json());

app.post('/', function (req, res, next) {
  console.log(req.body); // { images: [] }
  res.json(req.body);
});

app.listen(9000);

嗨,我尝试了这种方法,但我的后端也收到了{}。我还尝试了isPlainObject,我发现imj是PlainObject。你知道为什么吗? - Kingston Chan
@KingstonChan,你在使用Express吗?如果是的话,你是否在使用body-parser?http://expressjs.com/en/4x/api.html#req.body - Miguel Mota
是的,我正在使用express和body-parser。 app.use(bodyParser.urlencoded({ extended: true })); - Kingston Chan
@KingstonChan 我认为你需要 app.use(bodyParser.json()); // 用于解析应用程序/JSON - Miguel Mota
我同时使用了bodyParser.json和bodyParser.urlencoded,但问题仍然存在。这很奇怪... - Kingston Chan
1
@KingstonChan 我通过对数据进行 JSON.stringify 处理使其正常工作了。已更新答案。 - Miguel Mota

0

后端期望的contentType是什么?在NodeJS中,$.post方法的默认contentTypeapplication/x-www-form-urlencoded。如果您的终端正在寻找application/json,则始终会看到一个空输入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接