我试图通过AJAX POST请求将数组发送到我的Node / MongoDB服务器。正文还包含其他变量。这是客户端JS代码:
function setupForm(){
$("#add").submit(function(event) {
event.preventDefault();
var name = $("#name").val();
var logo = $("#logo").val();
var phone = $("#phone").val();
var email = $("#email").val();
var address = $("#address").val();
var postcode = $("#postcode").val();
var openingHours = $("#openingHours").val();
var loc = [44, 44];
$.ajax({
type: "POST",
url: "http://localhost:3000/services",
data: "name=" + name + "&logo=" + logo + "&phone=" + phone + "&email=" + email + "&address=" + address + "&postcode="+ postcode +"&openingHours=" + openingHours + "&loc=" + loc,
success: function(){alert('success');}
});
});
}
这是服务器端代码:
exports.addWine = function(req, res) {
var wine = req.body;
console.log('Adding wine: ' + JSON.stringify(wine));
db.collection('services', function(err, collection) {
collection.insert(wine, {safe:true}, function(err, result) {
if (err) {
res.send({'error':'An error has occurred'});
} else {
console.log('Success: ' + JSON.stringify(result[0]));
res.send(result[0]);
}
});
});
}
它将它添加到数据库,但采用此格式。我希望它在一个数组中:
"postcode" : "ugh",
"openingHours" : "fhgfh",
"loc" : "44,44"
答案 0 :(得分:2)
如上所述,使用serializeArray()。要添加额外参数,只需将其附加到数组,如下所示。
function setupForm(){
$("#add").submit(function(event) {
event.preventDefault();
var data = $(this).serializeArray();
// add extra parameters (don't forget brackets)
data.push({ name: 'loc[]', value: 44 });
data.push({ name: 'loc[]', value: 44 });
$.ajax({
type: "POST",
url: "http://localhost:3000/services",
data: data,
success: function() {
alert('success');
}
});
});
}
如果您想继续使用仅构建查询字符串的方法,则必须添加&loc[]=44&loc[]=44
,但从长远来看,只使用其中一个序列化函数会更好。
答案 1 :(得分:1)
看一下jQuery的.serialize()和.serializeArray()。他们应该能够做你想要的。
答案 2 :(得分:1)
鉴于您使用的数据,我建议您在POST请求中发送数据'身体。由于JSON,这将保留数据类型(数组,bools等)。
$.post("http://localhost:3000/services", {
name: $("#name").val(),
loc: [44, 44]
...etc
}, function(){alert('success');}
);
后端应该可以正常工作而无需改动。您可能需要将 body-parser 添加到中间件堆栈。正文解析器中间件会将正文转换为可以直接进入数据库的javascript对象。