在POST正文

时间:2016-04-21 21:13:34

标签: javascript arrays ajax mongodb express

我试图通过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"

3 个答案:

答案 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对象。