jQuery.ajax()省略了“空”对象属性

我有以下JS对象:

var data_test = { foo: [], bar: [ 'baz' ] }; 

当我通过jQuery.ajax()提交此对象时:

 $.ajax({ url: "test.php", type: "POST", data: data_test }); 

事实certificate只发送了bar数组,而不是foo数组。

certificate:在test.php中,我只需var_dump ed $_REQUEST

 array(1) { ["bar"]=> array(1) { [0]=> string(3) "baz" } } 

是否有可能强制jQuery也提交一个空对象属性? 我需要jQuery发送data_test对象的精确副本,如果它省略了破坏我的逻辑的空值!

游戏稍晚(非常),但我想指出,如果您的应用程序已准备好接受JSON,您可以使用JSON.stringify发送空数组:

 var data_test = { foo: [], bar: [ 'baz' ] }; $.ajax({ url: "test.php", type: "POST", data: JSON.stringify(data_test), contentType: 'application/json' }); 

这应该发布空数组。 请注意,从IE8开始可以使用JSON.stringify ,但是你总是可以使用json.js填补这个空白。

为什么不设置空数组….你甚至可以这样做一个函数….

 function __validate(obj) { for(key in obj) { if(obj[key].length == 0) { obj[key] = [""]; } } return obj; } data_test = __validate(data_test); 

现在,如果您将看到,您将获得确切的结构。 然而正如@lonesomeday正确地说的那样,没有jQuery方法可以做到这一点。