2011-11-06 34 views
0

嗨每一個我需要發送一個數組作爲使用$阿賈克斯POST請求的數據,此數組是一個關鍵值數組, 如

fields['BrandName'] = "Fiat,BMW" 
fields['year'] = "2004,2005" 

我想這

$.ajax({ 
    type: "POST", 
    url: url, 
    dataType: 'json', 
    data: {'adfields[]': fields}, 
    success: function(data){ 
     alert("passed");     
    }, 
    error: function(data, status){ 
     alert("error has occurred"); 
    } 
}); 

,但它不工作,我使用Wireshark的觀看請求,但沒有得到請求中發送,別的東西,當我嘗試做fields.length ..我得到零,雖然場[ 'BrandName']被定義並且有一個值 任何幫助?

+0

有一些方法可以做到http://www.zulius.com/how-to/send-multidimensional-arrays-php-with-jquery-ajax/ –

+1

如何在首位創建'fields' ?看起來你正在混淆數組和對象。 – Quentin

回答

2

繼阿爾弗雷德的回答,兩種方式您可以將fields可變碼爲對象,使得鍵/值屬性將在Ajax調用傳遞:

// declare empty object 
var fields = {}; 
// then add keys and values with the syntax you already had 
fields['BrandName'] = "Fiat,BMW"; 
fields['year'] = "2004,2005"; 

// OR 
// declare in one statement 
var fields = { 'BrandName' : "Fiat,BMW", 
       'year' : "2004,2005" }; 

請注意,花括號{}僅適用於初始聲明:一旦創建了對象,就可以使用方括號來訪問屬性。或者,點符號:

fields.BrandName = "Fiat,BMW"; 

(點符號只有在鍵名遵循相同的規則,其他JS識別符,例如,沒有空格,而不是開始一個數字,不是保留字等作品)
0

嗯,你只是給數組添加屬性(不是數組成員,不是數值),事實上,由於數組是一個對象,它接受屬性,但在序列化中只有編號的屬性會被寫入。嘗試使用簡單的對象,我認爲這應該工作。

JavaScript數組是類似列表的對象,帶有幾個內置方法來執行遍歷和變異操作。數組的大小和其元素的類型都不固定。由於數組的大小隨時可能增長或縮小,因此數組不能保證密集。一般來說,這些都是很方便的特性,但是如果這些對您的用例來說是可取的,那麼您可以考慮使用WebGL類型的數組。請注意,您不應將數組作爲關聯數組使用。你可以用 來代替它,儘管這樣做有它自己的 告誡。以任意鍵爲例,請參閱後面的輕量級JavaScript字典 。

MDN