2013-07-10 32 views
5

Im tạo hóa đơn cho sách và nhằm gửi hóa đơn qua ajax. Im cố gắng để json mã hóa các mảng sách trong hóa đơn, tuy nhiên tôi tiếp tục nhận được một giá trị trốngXâu chuỗi mảng đa kích thước bằng 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));
Đầu ra: [[]]

alert(order_items.toString());
Đầu ra: blank

console.log(order_items);
Đầu ra:

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] 

Mảng của tôi đang được tạo, nhưng bằng cách nào đó tôi không thể mã hóa được mã này? Tôi có làm điều gì sai?

Trả lời

0

bạn có thể thử

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)); 

sai lầm duy nhất của bạn là một cố gắng để tạo ra các mảng kết hợp thay vì sử dụng đối tượng, có thể làm điều đó

+0

chỉ cần cho biết lý do tại sao bạn downvoting – vladkras

+0

Mã của bạn hoạt động hoàn hảo! Cảm ơn! Tôi giả định rằng bài đăng của bạn đã bị hủy bỏ đơn giản vì tôi đã hỏi 'tôi đã làm gì sai', không phải cho chính mã đó :) – pinkpixycoder

+0

ok, tôi sẽ chỉnh sửa cho mọi người – vladkras

4

ArrayObject là những con thú khác nhau. bookdata của bạn không phải là một mảng, nhưng một đối tượng, do đó, bạn nên tạo nó với

var bookdata = {};

+0

Và, để dễ đọc, hãy gán với 'bookdata.isbn = ...' thay vì dấu ngoặc vuông và chuỗi (nó giống nhau, theo định nghĩa, trong thông số ES5). –

+0

Xem thêm câu trả lời của @ Jack bên dưới, bạn có thể liên kết việc tạo ra '{}' trống bằng cách điền vào nó như được hiển thị ở đó (tôi cũng có thể làm điều đó, như bước thứ hai; –

+0

Cảm ơn bạn đã giải thích nó, tôi giả định bookdata cũng là một mảng vì đầu ra console.log cho biết 'mảng' – pinkpixycoder

3

Mảng là serialized cách khác nhau với JSON.stringify() như trái ngược với đối tượng thường xuyên (chỉ tính chất của UInt32 là serialized). Kể từ khi bạn chỉ việc thêm thuộc tính văn bản đến bookdata, bạn nên sử dụng đối tượng ẩn danh như thế này:

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

Cảm ơn bạn! Điều đó có ý nghĩa. Tôi đã áp dụng nó vào mã của tôi bây giờ – pinkpixycoder

Các vấn đề liên quan