如何在MVC控制器中使用JQuery AJAX发布多个数组?

时间:2015-09-26 14:59:12

标签: jquery arrays ajax asp.net-mvc

我的Jquery是

 $(":checkbox").change(function() {
        if(this.checked) {
            var man_data = { 'man': [] };
            var size_data = { 'size': [] };
            var color_data = { 'color': [] };

            $('input:checked').each(function () 
            {
                if(this.name == 'man') man_data['man'].push($(this).val());
                if(this.name == 'size') size_data['size'].push($(this).val());  
                if(this.name == 'color') color_data['color'].push($(this).val());  
            });
            var path = "/Home/Index";
            $.ajax({
                url: path, type: "POST", cache: "false",
                dataType: "json", contentType: "application/json; charset=utf-8",
                data: JSON.stringify(man_data),
                traditional: true,
                converters: {'text json': true}
            }).success(function (responseText) {
                $('#Grid').replaceWith(responseText);
            }).error(function (responseText){
                swal("Error!", "Test 1", "error");
            });
            //swal("Error!", "Test 2", "error");
        }
    });

如果我只发布一个数组data: JSON.stringify(man_data),那么效果很好。 问题是我想发布所有3个数组的内容

  • man_data
  • size_data
  • color_data

我试过像

这样的东西
data: JSON.stringify(man_data + size_data + color_data)

但它没有按预期工作:(

我应该如何修改上面的代码?

我也试过像

这样的东西
data: {'man':JSON.stringify(man_data),'size':JSON.stringify(size_data)},

但现在我收到错误Invalid JSON primitive: man.

更新

数据在MVC控制器发送

public ActionResult Index(int[] man = null, int[] size = null, int[] color = null)
{
}

2 个答案:

答案 0 :(得分:1)

要合并数据,我会使用Array.prototype.concat()

当您将数组存储在对象中时,您必须在连接它们之前访问属性以获取数组。在这里,我将数组连接成一个新数组:

[].concat(man_data.man, size_data.size, color_data.color);

除非您计划为这些对象添加更多属性,否则我建议您将其更改为数组。

var man_data = [];
var size_data = [];
var color_data = [];

像这样你就可以做到:

[].concat(man_data, size_data, color_data);

或者,您可以只使用以下结构发送数据,而不是连接:

var data = {
  man_data: [],
  size_data: [],
  color_data: []
};

除了你所要做的就是发送该对象JSON.stringify(data);

答案 1 :(得分:0)

尝试将Ajax调用上的数据参数更改为data: { 'man': JSON.stringify(man_data), 'size': JSON.stringify(size_data),'color': JSON.stringify(man_color)}抱歉,如果代码格式不正确,我就是移动设备。