5

我正在为书籍创建发票,并旨在通过 ajax 提交。我试图对发票中的书籍数组进行 json 编码,但是我一直得到一个空白值

 //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 编码?难道我做错了什么?

4

3 回答 3

4

Array并且Object是不同的野兽。你bookdata不是一个数组,而是一个对象,因此,你应该用

var bookdata = {};

于 2013-07-10T14:16:12.300 回答
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()
};
于 2013-07-10T14:19:25.490 回答
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));

您唯一的错误是尝试创建关联数组而不是使用对象,这可以做到

于 2013-07-10T14:32:47.613 回答