Javascript 在使用JSON.stringify后将其发布到express server时,它不会';行不通
我试图发送一个简单的数组,将服务器表示为JSON,然后将其转换回服务器端的对象 客户端: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
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