使用jQuery的$ .ajax()将多个Json对象作为数据传递

我正在将数据发布到MVC控制器,我正在尝试维护状态以及乐观并发。 我目前正在发布一个JSON请求,但是对于可行的替代方案是开放的吗?

我已经使用以下命令发布了一个名称/值集合:

$.ajax({ url: g_appPath + "/Rounding.aspx/Round/" + $("#OfferId").val(), type: 'POST', dataType: 'html', data: $.toJSON(data), // <-- data = name/value array contentType: 'application/json; charset=utf-8', beforeSend: doSubmitBeforeSend, complete: doSubmitComplete, success: doSubmitSuccess }); 

我还有一个(加密的)id和时间戳数组,我想传回去,这样服务器就可以对它进行解密,然后在保存之前validation数据是否仍然新鲜。

非常重要的是,数据对象是独立的,并且不是一个或另一个的子节点或在包装器数组中(因为在服务器端reflection反序列化)。 同样重要的是要注意我想要异步执行此操作而不是表单提交。

我的问题是:有什么方法可以使用’application / json’作为内容类型回发2个JSON对象?

我的另一个问题是:有没有更好的/另一种方式我可以做到这一点?

提前致谢!

更新 :我解决了我的问题,通过将contentType参数更改为默认值,而是将字符串化的ajax数据作为单独的命名参数发送到查询字符串中。

当你使用contentType:’application / json; charset = utf-8’,这会将数据推送到请求的主体,而不是查询字符串。 我的新$ .ajax()post现在看起来像这样:

 $.ajax({ url: g_appPath + "/Rounding.aspx/Round/" + $("#OfferId").val(), type: 'POST', dataType: 'html', data: "RoundingData=" + $.toJSON(data) + "&StateData=" + $.toJSON(stateData), // --removed! contentType: 'application/json; charset=utf-8', beforeSend: doSubmitBeforeSend, complete: doSubmitComplete, success: doSubmitSuccess }); 

这个问题真的出现了,因为我对这种类型的数据操作缺乏经验,我希望将来有人能够发现这个问题。

谢谢!

据我所知,没有办法发送回两个完全不同的JSON对象,这些对象不是单个父JSON对象的子对象,并且使用.ajax()方法让jQuery对它进行解码。 我想,您可以使用两个JSON对象作为字符串进行回复,然后使用外部JSON库将字符串计算为Javascript对象。

这是否回答你的问题?

Ooops:你问的是从jquery向你的控制器发布两个不同的JSON对象……,对吧? 我的坏…是的,你可以这样做……只需改变这一行:

 data: $.toJSON(data), 

至:

 data: { json_1:$.toJSON(data_1), json_2:$.toJSON(data_2) }, 

抱歉混淆了。

如果我理解正确,function性说话,你想发送

 object 1, object 2 

这相当于发送

 [ object 1, object 2 ] 

唯一的区别是前一种情况下的数组是隐式的,而后一种情况则是明确的。 它仍然存在,但是如果你想在JSON中发送多个对象,你需要使用显式方法。

因此,将两个数据对象包装在一个数组中确实是理想的选择,但如果您的服务器代码不支持,那么您将需要一个替代方案。 我能看到的唯一可能的方法是将两个数据对象放在另一个对象中,如下所示:

 var data = {}; data[0] = data1; data[1] = data2; 

然后通过AJAX调用发送data

我甚至会说问题不是你的方法,而是接收端的JSON处理。

你可以在asp.net中以一种简单的方式做到这一点,如果你只是想将多个数据发送到webmethod

 data: '{userName: "' + $("#<%=txtUserName.ClientID%>")[0].value + '",userName1: "' + $("#<%=TextBox1.ClientID%>")[0].value + '" }', 

这是很长一段时间后的答案,但对于您将来的任何参考可能会有所帮助。

我建议你阅读这个直接解决你的问题的stackoverflow答案 。

我想你可以这样做:

 var data = {}; var object1 = {}; var object2 = {}; data.object1 = object1;
data.object2 = object2; // serializer JSON2.stringify(data);