2013-07-10 6 views
5

도서에 대한 인보이스를 작성하고 아약스를 통해 제출하는 것을 목표로 다차원 배열을 문자열 화하십시오. [[]]자바 스크립트

alert(order_items.toString());
출력 : blank

console.log(order_items);
임 그러나 나는 빈 값

//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));
출력가 계속 송장 책의 배열을 인코딩 JSON하려고 출력 :

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은 다른 동물입니다. 일반 객체에 반대 직렬화가 JSON.stringify()와 다르게 bookdata가 배열이 아니라 개체가, 따라서 당신이

var bookdata = {};

+0

가독성을 위해 대괄호와 문자열 대신에 'bookdata.isbn = ...'을 지정하십시오 (이는 정의상 ES5 스펙과 동일합니다). –

+0

아래의 @ Jack의 대답을 참고하십시오. 빈'{}'을 거기에 표시된대로 채워서 바인드 할 수 있습니다 (두 번째 단계로도 수행 할 것입니다. 즉각적인 버그가 수정되었습니다). –

+0

설명해 주셔서 고맙습니다. 나는 console.log 출력이 'array'라고했기 때문에 bookdata도 배열이라고 생각했습니다. – pinkpixycoder

3

배열을 만들어야 있습니다 (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