2013-07-10 48 views
5

爲圖書創建發票,並且希望通過ajax提交它。我試着去JSON的書籍陣列編碼的發票,但我不斷收到一個空值用JavaScript編寫一個多維數組

//create item list 
    var order_items = []; 
    $('#mi_books tbody tr.userbooks').each(function(index) 
    { 
     var bookisbn = $(this).find('td .mi_isbn').text(); 

     var bookdata = []; 
     bookdata['isbn'] = bookisbn; 
     bookdata['title'] = $(this).find('.mi_title').text(); 
     bookdata['qty'] = $(this).find('.mi_qty').text(); 
     bookdata['price'] = $(this).find('.mi_price').text(); 

     order_items.push(bookdata); 

    }); 
    alert(JSON.stringify(order_items)); 
    alert(order_items.toString()); 
    console.log(order_items); 

alert(JSON.stringify(order_items));
輸出:[[]]

alert(order_items.toString());
輸出:blank

console.log(order_items);
輸出:

Array[1] 
0: Array[0] 
isbn: "9781401216672" 
length: 0 
price: "1007" 
qty: "1" 
title: "Batman: The Killing Joke" 
__proto__: Array[0] 
length: 1 
__proto__: Array[0] 

我的數組正在創建,但不知何故,我似乎不能json編碼它?難道我做錯了什麼?

回答

0

,你可以嘗試

var order_items = {}; 
$('#mi_books tbody tr.userbooks').each(function(index) 
{ 
    var bookisbn = $(this).find('td .mi_isbn').text(); 

    var bookdata = { 
     'isbn': bookisbn, 
     'title': $(this).find('.mi_title').text(), 
     'qty': $(this).find('.mi_qty').text(), 
     'price': $(this).find('.mi_price').text() 
    }; 
    order_items[index] = bookdata; 
}); 
alert(JSON.stringify(order_items)); 

你唯一的錯誤是試圖創建關聯數組,而不是使用對象,它可以做

+0

只是告訴你爲什麼downvoting – vladkras

+0

你的代碼完美的工作!謝謝! 我假設你的帖子是downvoted只是因爲我問'我做錯了什麼',而不是代碼本身:) – pinkpixycoder

+0

好的,我會編輯給大家 – vladkras

4

ArrayObject是不同的野獸。您bookdata不是一個數組,而是一個對象,因此,你應該

var bookdata = {};

+0

而且,爲了便於閱讀,使用'bookdata.isbn = ...'而不是方括號和字符串進行賦值(根據定義,這在ES5規範中是相同的)。 – 2013-07-10 14:18:05

+0

另請參見@傑克的答案如下,你可以綁定創建空的'{}'並填充它,如圖所示(我可能也會這樣做,作爲第二步;我修正了直接的錯誤)。 – 2013-07-10 14:23:09

+0

感謝您解釋它,我認爲bookdata也是一個數組,因爲console.log輸出說'數組' – pinkpixycoder

3

陣列創建序列化不同與JSON.stringify(),而不是常規的對象(僅UInt32的屬性被序列化)。既然你只需要添加的文本屬性的bookdata,你應該使用匿名對象是這樣的:

var bookdata = { 
    isbn: bookisbn, 
    title: $(this).find('.mi_title').text(), 
    qty: $(this).find('.mi_qty').text(), 
    price: $(this).find('.mi_price').text() 
}; 
+0

謝謝!這就說得通了。我已經將它應用於我的代碼 – pinkpixycoder