Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么jQueryAjax不序列化我的对象?_Jquery_Serialization - Fatal编程技术网

为什么jQueryAjax不序列化我的对象?

为什么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(

我使用的是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(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
,但它没有按预期工作。另外,你给我发的帖子上的答案也不被接受。