2013-07-10 17 views
5

Im creare una fattura per i libri e mirare a inviarlo tramite ajax. Nel tentativo di JSON codificare la serie di libri in fattura, ma continuo a ricevere un valore vuotoStringificare un array multidimensionale con 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));
Uscite: [[]]

alert(order_items.toString());
Uscite: blank

console.log(order_items);
Uscita:

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] 

Il mio array è in fase di creazione, ma in qualche modo non riesco a codificarlo a json? Sto facendo qualcosa di sbagliato?

risposta

0

si può provare

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

tuo unico errore è stato un tentativo di creare array associativi invece di utilizzare oggetti, che possono farlo

+0

solo dire perché stai facendo downvoting – vladkras

+0

Il tuo codice funziona perfettamente! Grazie! Suppongo che il tuo post sia stato downvoted semplicemente perché ho chiesto "cosa stavo facendo male", non per il codice stesso :) – pinkpixycoder

+0

ok, io modificherò per tutti – vladkras

4

Array e Object sono animali diversi. Il tuo bookdata non è un array, ma un oggetto, quindi, è necessario creare con

var bookdata = {};

+0

E, per la leggibilità, assegnare con 'bookdata.isbn = ...' invece di parentesi quadre e stringhe (è lo stesso, per definizione, nelle specifiche ES5). –

+0

Vedere anche la risposta di @ Jack in basso, è possibile associare la creazione di '{}' vuoto con il riempimento come mostrato qui (probabilmente anch'io lo farò, come un secondo passaggio, ho corretto il bug immediato). –

+0

Grazie per averlo spiegato, ho pensato che il bookdata fosse anche un array perché l'output console.log diceva 'array' – pinkpixycoder

3

array vengono serializzati in modo diverso con JSON.stringify() al contrario di oggetti normali (solo le proprietà di UInt32 sono serializzato). Dal momento che si sta aggiungendo solo le proprietà testuali al bookdata, si consiglia di utilizzare oggetti anonimi come questo:

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

Grazie! Ciò ha senso. L'ho applicato al mio codice ora – pinkpixycoder

Problemi correlati