为什么jQueryAjax不序列化我的对象?
我使用的是jQuery1.7.1。我有以下问题: 守则内容如下:为什么jQueryAjax不序列化我的对象?,jquery,serialization,Jquery,Serialization,我使用的是jQuery1.7.1。我有以下问题: 守则内容如下: var accountObject = new Object(); accountObject.account = new Object(); accountObject.account.sas = []; $.ajax({ type: "PUT", url: "/a/2", data: accountObject, dataType: "html", success: function(
var accountObject = new Object();
accountObject.account = new Object();
accountObject.account.sas = [];
$.ajax({
type: "PUT",
url: "/a/2",
data: accountObject,
dataType: "html",
success: function(msg) {
alert_user("Successfully saved the selected session attributes as defaults");
},
error: function(msg) {
alert_user(msg);
}
});
问题是,由于我将accountObject.account.sas
设置为空数组,因此数据在服务器上完全为空,如下所示:
{}
本应是:
{ "account": { "sas": [] } }
当我在account
的sas
属性中输入一些条目时,一切正常。例如,如果我将字符串“1”、“2”和“3”作为一个数组[“1”、“2”、“3”]
放入服务器:
{ "account": { "sas": [ "1", "2", "3" ] } }
有人知道为什么会这样吗
提前谢谢
Panayotis您的问题是空数组。您可以发送空字符串,也可以根据需要尝试设置traditional:true
还有一个答案,来自traditional
的Apart也建议使用JSON.stringify
。在评论中,他们还提到aps.net mvc模型绑定器是问题所在
我不知道ruby是如何实现asp.net mvc的模型绑定的,但我认为这是您应该关注的地方。问题是不能在查询字符串中正确表示空数组。当您将对象层次结构传递给数据
时,jQuery将尝试将其转换为查询字符串,但无法确定如何处理空数组
1.4.4在通过同一层次结构时似乎返回空字符串的原因是它试图将键传递给没有值的查询字符串,结果如下:…&property=&
。在大多数服务器环境中,这默认解释为空字符串
我个人认为1.7.1的行为是正确的,因为它迫使开发人员检查参数的存在而不是破坏参数的类型。
关于这里提到的各种事情的一些注意事项
traditional:true
是完全错误的,因为它无法处理对象层次结构。取而代之的是:…&key=[object object]
,这是javascript的toString()
所有对象的默认结果
JSON.stringify
分配给data
将导致整个内容作为JSON传递给查询字符串,除非您将其与processData:false
组合,在这种情况下,您需要在服务器端“手动”反序列化为有意义的对象。这通常是一个有用的选项,但在这种情况下,简单的检查可能会使事情以最小的麻烦进行
数据类型:“html”
?尝试dataType:“json”
@JoeTuskan:dataType
只负责和需要返回的数据。dataType
不相关;它控制预期的响应格式,而不是查询参数的格式。您如何在服务器端接收数据?来自请求机构?后视镜?URL范围?@KevinB我正在使用Ruby on Rails处理请求params[:account][:sas]
应该给我一个包含元素或不包含元素的数组。但如果我发送空数组,params[:account]
根本不存在。还请注意,当我在jQuery 1.4.4中时,它发送了一个空字符串”
,用于parasm[:account][:sas]
,如中所述。也许我的帖子我现在可以说它是它的一个副本。我不想发送一个空字符串。我想发送一个空数组。这样我就可以统一处理服务器上的请求。我尝试了traditional:true
,但它没有按预期工作。另外,你给我发的帖子上的答案也不被接受。