通过 ajax 将嵌套对象发布到 nodejs 服务器返回未定义
Posting nested object to nodejs server via ajax is returning undefined
几个小时以来我一直在努力解决这个问题,但我似乎找不到问题的原因。
在客户端 Javascript 我通过 ajax 将嵌套对象发布到我的后端 nodejs 服务器。 ajax 看起来像这样:
$.ajax({
type: "POST",
url: "/user/save",
data: {
"account": {
"username": $signupForm.find("input[name='register_username']").val(),
"email": $signupForm.find("input[name='register_email']").val(),
"password": $signupForm.find("input[name='register_password']").val(),
"plan": subscription
},
"stripe": stripeResponse
},
dataType: "json",
beforeSend: function(){
$.fn.showLoading();
},
success: function(data){
}
});
然后我在 routes/index.js
中捕捉到了这个
router.post('/user/save', function(req, res){
var post_data = req.body;
console.info(post_data);
var account = post_data.account;
var card = post_data.stripe;
console.log(account);
console.log(card);
// Rest of code...
现在的问题是,由于某种原因,post_data.account
和 post_data.stripe
都被 return 编辑为未定义。 post_data 本身确实 return 数据。
我也尝试使用 JSON.stringify
从 ajax 发送数据,但效果不佳。
我还需要 body-parser 并在 app.js
下使用
我看不出我的问题出在哪里。为什么我的数据未定义?
在您的 ajax()
设置中设置 contentType: 'application/json; charset=UTF-8'
,否则将使用 application/x-www-form-urlencoded
,这就是为什么您会看到按照您的方式格式化数据的原因。
另一个可能的修复方法是在 bodyParser.urlencoded()
中间件选项中设置 extended: true
,因为请求发送的是 urlencoded 数据而不是 json(尽管 dataType: "json"
)服务器端。这将使解析器转换 urlencoded 请求数据,以便按照您的预期创建对象和数组。
对我有用的是在客户端将数组转换为字符串,然后将其转换为 JSON 对象服务器端。
几个小时以来我一直在努力解决这个问题,但我似乎找不到问题的原因。
在客户端 Javascript 我通过 ajax 将嵌套对象发布到我的后端 nodejs 服务器。 ajax 看起来像这样:
$.ajax({
type: "POST",
url: "/user/save",
data: {
"account": {
"username": $signupForm.find("input[name='register_username']").val(),
"email": $signupForm.find("input[name='register_email']").val(),
"password": $signupForm.find("input[name='register_password']").val(),
"plan": subscription
},
"stripe": stripeResponse
},
dataType: "json",
beforeSend: function(){
$.fn.showLoading();
},
success: function(data){
}
});
然后我在 routes/index.js
中捕捉到了这个router.post('/user/save', function(req, res){
var post_data = req.body;
console.info(post_data);
var account = post_data.account;
var card = post_data.stripe;
console.log(account);
console.log(card);
// Rest of code...
现在的问题是,由于某种原因,post_data.account
和 post_data.stripe
都被 return 编辑为未定义。 post_data 本身确实 return 数据。
我也尝试使用 JSON.stringify
从 ajax 发送数据,但效果不佳。
我还需要 body-parser 并在 app.js
下使用我看不出我的问题出在哪里。为什么我的数据未定义?
在您的 ajax()
设置中设置 contentType: 'application/json; charset=UTF-8'
,否则将使用 application/x-www-form-urlencoded
,这就是为什么您会看到按照您的方式格式化数据的原因。
另一个可能的修复方法是在 bodyParser.urlencoded()
中间件选项中设置 extended: true
,因为请求发送的是 urlencoded 数据而不是 json(尽管 dataType: "json"
)服务器端。这将使解析器转换 urlencoded 请求数据,以便按照您的预期创建对象和数组。
对我有用的是在客户端将数组转换为字符串,然后将其转换为 JSON 对象服务器端。