【问题标题】:How can i post multiple arrays with JQuery AJAX in an MVC controller?如何在 MVC 控制器中使用 JQuery AJAX 发布多个数组?
【发布时间】:2015-09-26 14:59:12
【问题描述】:

我的 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
  • 大小数据
  • 颜色数据

我尝试了类似的东西

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)
{
}

【问题讨论】:

  • 你试过像man_data.concat(size_data, color_data)这样的事情吗?
  • @Dan 我得到一个 man_data.concat 不是函数错误。
  • man_data 绝对是一个数组吗?获取不是函数错误表明它不是。哦,我明白了,这是因为它们都被包裹在物体中,这是有原因的吗?我会把它变成一个答案。
  • @Dan 实际上,数据是在 MVC 控制器上发送的,man、size 和 color 是控制器的参数。我当然会尝试你的解决方案
  • 仍然没有运气:( 不会那么困难

标签: jquery arrays ajax asp.net-mvc


【解决方案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);

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你好,我知道 JSON.Stringify 不是函数
    • 使用 JSON.stringify,我不应该大写 S。
    • @Chocol8 看看编辑是否有效。否则我一到家就去看看。
    猜你喜欢
    • 2016-12-07
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2016-02-07
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多