Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在使用JSON.stringify后将其发布到express server时,它不会';行不通_Javascript_Json - Fatal编程技术网

Javascript 在使用JSON.stringify后将其发布到express server时,它不会';行不通

Javascript 在使用JSON.stringify后将其发布到express server时,它不会';行不通,javascript,json,Javascript,Json,我试图发送一个简单的数组,将服务器表示为JSON,然后将其转换回服务器端的对象 客户端: var hand = { cards: [] } // I randomly generate some numbers and suits and then add to the array. var card_obj = { "number": number, "suit": suit }; hand.cards.push(card_obj) //Send to Express server

我试图发送一个简单的数组,将服务器表示为JSON,然后将其转换回服务器端的对象

客户端:

var hand = { cards: [] }
// I randomly generate some numbers and suits and then add to the array.
var card_obj = { "number": number, "suit": suit };
hand.cards.push(card_obj)

//Send to Express server 
          var hand_json = JSON.stringify(hand)
          $.post("hand", hand_json, function(result) {
                console.log(result);
            });

服务器端:

app.post("/hand", function(req, res) {
    var cards = req.body.cards
    console.log(cards[0])
});

此代码不起作用,因为我在服务器端控制台上收到:无法读取未定义的属性“0”

但是,如果我将客户端代码更改为以下代码,它将起作用:

            var test = { "cards": [{ "number": "9", "suit": "club" }, { "number": "10", "suit": "club" }, { "number": "K", "suit": "spades" }, { "number": "A", "suit": "hearts" }, { "number": "5", "suit": "diamonds" }] }

            $.post("hand", test , function(result) {
                console.log(result);
            });

奇怪的是,测试变量是由JSON.stringify(hand)生成的同一个变量,我只是从控制台复制了它


我不明白为什么使用JSON.stringify(hand)时,它不起作用。但是当复制粘贴对象并传递它时,它就起作用了

要在正文中发送post请求内容
JSON
,您需要确保两件事:

因为您使用的是
JQuery
。从客户端,您必须使用
ajax
函数在请求中包含
contentType:“application/json
,以通知服务器您正在发送json文件:

$.ajax({
  url: url,
  type:"POST",
  data: JSON.stringify(hand),
  contentType:"application/json",
  dataType:"json",
  success: function(result){
    `...Do something when the data returned`
  }
})
现在在服务器中,您应该安装并定义一个中间件来处理post请求

安装
npm安装正文解析器--保存

并在express中使用它

const bodyParser = require('body-parser');

// support parsing of application/json type post data
app.use(bodyParser.json());

//And make sure your route is placed below the parser
app.post("/hand", function(req, res) {
    var cards = req.body.cards
    console.log(cards[0])
});


你能展示一下你用作服务器代码主体解析器的中间件吗?我正在使用主体解析器:app.use(bodyParser.json());是的,请在下面检查我的答案谢谢Ethan,我已经在使用bodyParser,它确实可以用ajax工作。但是,当我试图删除主体解析器并使用app.use(express.json())时,它也能工作!我的问题是,为什么在我使用JQuery时它不能工作。更新的答案,你需要在请求中提供一个数据类型。如果你发送的jsonIt不起作用,服务器上的对象是未定义的。我也试着使用body解析器,但不起作用。我建议再次添加你以前的答案,因为它可以工作!我将现在我将使用ajax,但我仍然有兴趣知道JQuery的答案。是的,我也在努力寻找答案,如果我找到了$.post()的正确解决方案,我会告诉您。据我所知,$.post()不支持发送json