小编典典

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

ajax

我正在将数据发布到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数据作为单独的命名参数发送到querystring中,解决了我的问题。

当您使用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
});

由于我对这种类型的数据操作缺乏经验,所以确实出现了这个问题,我希望将来有人在寻找这个问题时会偶然发现。

谢谢!


阅读 1233

收藏
2020-07-26

共1个答案

小编典典

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

这是否回答你的问题?

糟糕: 您是在问要从jquery向控制器发布两个不同的JSON对象…,对吗?我的坏人…是的,您可以这样做…只需更改此行:

data: $.toJSON(data),

至:

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

对不起,我很困惑。

2020-07-26