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

时间:2013-02-21 10:27:20

标签: jquery

我有以下JS对象:

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

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

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

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

证明:在 test.php 中我只是var_dump编辑$_REQUEST

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

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

2 个答案:

答案 0 :(得分:15)

游戏稍晚(非常),但我想指出,如果您的应用程序已准备好接受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填补这一空白。

答案 1 :(得分:0)

为什么不设置空数组....你甚至可以用这种方式创建函数....

function __validate(obj) {

 for(key in obj) {

  if(obj[key].length == 0) {
    obj[key] = [""];
  }

 }

return obj;
}

data_test = __validate(data_test);

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