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

时间:2009-10-09 18:17:44

标签: jquery asp.net-mvc 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和时间戳数组,我想传回去,这样服务器就可以对其进行解密,然后在保存数据之前验证数据是否仍然新鲜。

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

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

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

提前感谢!

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

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

$.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
});

这个问题的确产生了,因为我对这种类型的数据操作缺乏经验,我希望将来有人能够找到这个可能会遇到这个问题。

谢谢!

5 个答案:

答案 0 :(得分:16)

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

这会回答你的问题吗?

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

data: $.toJSON(data),

为:

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

抱歉混淆了。

答案 1 :(得分:1)

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

object 1,
object 2

相当于发送

[
    object 1,
    object 2
]

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

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

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

然后通过AJAX调用发送data

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我认为你可以这样做:

var data = {};
var object1 = {};
var object2 = {};

data.object1 = object1;<br/>
data.object2 = object2;

// serializer

JSON2.stringify(data);

答案 4 :(得分:0)

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

我建议您阅读直接解决问题的this stackoverflow answer