带有序列化和数据数组的jQuery post()

带有序列化和数据数组的jQuery post(),jquery,jquery-post,Jquery,Jquery Post,在mvc 3中发布期间,我无法获取集合值。 返回空值。 $.post("/Work/Post", { vm: $('#myForm').serializeArray(), 'collection': ['a', 'b', 'c'] }); //Or var data = $('#myForm').serializeArray(); data.push({ name: 'collection', value: ['a', 'b', 'c'] }); $.post("/Work/Post",

在mvc 3中发布期间,我无法获取集合值。 返回空值。

$.post("/Work/Post", { vm: $('#myForm').serializeArray(), 'collection': ['a', 'b', 'c'] });

//Or


var data = $('#myForm').serializeArray();
data.push({ name: 'collection', value: ['a', 'b', 'c'] });
$.post("/Work/Post", data);

//Or

var data = $('#myForm').serializeArray();
data.push({ name: 'collection[]', value: ['a', 'b', 'c'] });
$.post("/Work/Post", data);

我在传递数组时遇到了类似的问题

不要使用
$.post
使用
$.ajax
并设置
traditional
选项=
true

$.ajax({
    type: "POST",
    url: "Work/",
    traditional: true,
    data: { collection: ['a','b','c'] }
});

traditional:true
选项很重要

我用常规的.ajax()调用把头撞在墙上好几个月了

我最终发现,您需要在$.ajax()的参数列表中设置
traditional:true
。(请参见此处的“传统”标题:)


由于$.post()没有参数列表,我不确定您是否可以使用$.post()执行此操作。但是使用$.ajax()的代码并不多。

下面的代码对我很有用。您可以使用serializeArray()serializeJSON(),如下所示,并将其设置为数据元素。观察formData变量

var formData = $('#inputForm').serializeJSON();
$.ajax({
    type : "POST",
    url: server_side_url,
    cache:false,
    traditional: true,
    data: formData,
    dataType: "json",
    success: function(data, textStatus, jqXHR){
        console.log("successfully processed.");
    },
    error: function(xhr,status,error){
        console.log("error occurred.");
    }
}); 

尝试直接使用.ajax而不是.post,然后看看您是否得到了一些东西使用Firebug或类似的工具来查看作为请求的一部分发送的数据,并检查它是否与服务器上期望/需要的格式匹配。更多的人应该知道jquery ajax数据模型的名称-值对用法。
var formData = $('#inputForm').serializeJSON();
$.ajax({
    type : "POST",
    url: server_side_url,
    cache:false,
    traditional: true,
    data: formData,
    dataType: "json",
    success: function(data, textStatus, jqXHR){
        console.log("successfully processed.");
    },
    error: function(xhr,status,error){
        console.log("error occurred.");
    }
});