2013-02-21 2 views
1

У меня есть следующий объект JS:jQuery.ajax() пропускает "пустые" атрибуты объекта

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 для отправки EXACT-копии объекта data_test, если он опустил пустое значение, которое нарушает мою логику!

+3

[Это намеренно так.] (Http://bugs.jquery.com/ticket/6481) Нет способа jQuery для этого. – lonesomeday

+0

Спасибо за объяснение и ссылку. Можете ли вы добавить свой комментарий в качестве ответа, чтобы я мог его принять, или есть что-то еще, что я должен делать, поскольку нет решения для моего вопроса? –

ответ

13

Немного (очень) поздно к игре, но я хотел бы отметить, что если ваше приложение готово принять JSON, вы можете отправить пустые массивы, используя JSON.stringify:

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

$.ajax({ 
    url: "test.php", 
    type: "POST", 
    data: JSON.stringify(data_test), 
    contentType: 'application/json' 
}); 

Это должно опубликовать пустой массив. Помните, что JSON.stringify доступен начиная с IE8, но вы всегда можете использовать json.js, чтобы заполнить этот пробел.

0

почему бы не просто установить пустой массив .... вы даже можете сделать функцию таким образом ....

function __validate(obj) { 

for(key in obj) { 

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

} 

return obj; 
} 

data_test = __validate(data_test); 

Теперь, если вы увидите, вы получите точную структуру. Тем не менее, как @lonesomeday правильно сказал, нет никакого способа jQuery для этого.

+0

Спасибо. Да, мне нужно будет сейчас изучить изменение моего приложения вокруг этого факта. –

Смежные вопросы