我的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个数组的内容
我试过像
这样的东西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)
{
}
答案 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)}
抱歉,如果代码格式不正确,我就是移动设备。