我正在使用jQuery 1.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(msg) {
alert_user("Successfully saved the selected session attributes as defaults");
},
error: function(msg) {
alert_user(msg);
}
});
问题是,由于我将accountObject.account.sas
设置为空数组,data
在服务器上完全为空,如下所示:
{}
应该是:
{ "account": { "sas": [] } }
当我在sas
的{{1}}属性中添加一些条目时,一切正常。例如,如果我将字符串“1”,“2”和“3”作为数组account
,那么我就进入服务器:
["1", "2", "3"]
有人知道为什么会这样吗?
提前致谢 Panayotis
答案 0 :(得分:2)
问题是无法在查询字符串中正确表示空数组。当您将对象层次结构传递给data
时,jQuery将尝试将其转换为查询字符串,但无法弄清楚如何处理空数组。
1.4.4似乎在传递相同层次结构时返回空字符串的原因是它试图将键传递给没有值的查询字符串,其结果如下:{{1} }。默认情况下,这在大多数服务器环境中被解释为空字符串。
我个人认为1.7.1的行为是正确的,因为它迫使开发人员检查参数是否存在而不是破坏参数的类型。
关于此处提及的各种事项的一些注意事项
...&property=&
完全错误,因为它永远无法处理对象层次结构。您获得的是:traditional: true
,这是所有对象的javascript ...&key=[object Object]
默认结果。
toString()
的 JSON.stringify
将导致整个事件作为JSON传递给查询字符串,除非您将其与data
结合使用,在这种情况下您需要反序列化在服务器端“手动”进入有意义的对象。它通常是一个有用的选项,但在这种情况下过度杀戮,在这种情况下,简单的检查可能会让事情变得简单。
答案 1 :(得分:0)