簡體   English   中英

在POST正文中發送數組

[英]Sending an array in POST body

我正在嘗試通過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"

如前所述,使用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但從長遠來看,最好只使用序列化函數之一。

看一下jQuery的.serialize().serializeArray() 他們應該能夠滿足您的需求。

給定您正在使用的數據,我建議在POST請求的正文中發送數據。 多虧了JSON,這將保留數據類型(數組,布爾值等)。

$.post("http://localhost:3000/services", {
        name: $("#name").val(),
        loc: [44, 44]
        ...etc
    }, function(){alert('success');}
);

后端應該可以正常工作,無需進行任何更改。 您可能需要將正文解析器添加到中間件堆棧。 主體解析器中間件會將主體轉換為javascript對象,您可以將其直接推送到數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM