2013-02-21 92 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發送一個data_test對象的精確副本,如果它忽略了空值,這會破壞我的邏輯!

+3

[這是故意如此。](http://bugs.jquery.com/ticket/6481)沒有jQuery的方式來做到這一點。 – lonesomeday 2013-02-21 10:31:55

+0

感謝您的解釋和鏈接。你可以添加你的評論作爲答案,以便我可以接受它,或者還有其他事情我應該做,因爲我的問題沒有解決方案? – 2013-02-21 11:01:56

回答

13

小(非常)太遲了,但我想指出的是,如果您的應用程序已準備好接受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填補此空白。

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

謝謝。是的,我現在必須考慮改變我的應用程序。 – 2013-02-21 11:02:27