我正在将数据发布到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 });
由于我对这种类型的数据操作缺乏经验,所以确实出现了这个问题,我希望将来有人在寻找这个问题时会偶然发现。
谢谢!
担
据我所知,没有办法发送回两个完全不同的JSON对象,这些对象不是单个父JSON对象的子对象,而让jQuery使用此.ajax()方法为您解码。我想,您可以将两个JSON对象作为字符串进行回复,然后使用外部JSON库将字符串评估为Javascript对象。
.ajax()
这是否回答你的问题?
糟糕: 您是在问要从jquery向控制器发布两个不同的JSON对象…,对吗?我的坏人…是的,您可以这样做…只需更改此行:
data: $.toJSON(data),
至:
data: { json_1:$.toJSON(data_1), json_2:$.toJSON(data_2) },
对不起,我很困惑。