2009-08-05 11 views
6

Moje pierwsze zagłębianie w pracę z danymi JSON. Mam jednak trochę doświadczenia z używaniem jQuery.jQuery - parsowanie danych JSON - problem z nazwą zmiennej

jestem delegowania do tego URL (tumblr API): jyoseph.com/api/read/json

Co staram się zrobić, to wyjście JSON, który zostanie zwrócony. Co mam tak daleko:

$(document).ready(function(){ 

$.getJSON("http://jyoseph.com/api/read/json?callback=?", 
    function(data) { 
    //console.log(data); 
    console.log(data.posts);   

     $.each(data.posts, function(i,posts){ 
     var id = this.id; 
     var type = this.type; 
     var date = this.date; 
     var url = this.url; 
     var photo500 = this.photo-url-500; 

     $('ul').append('<li> ' +id+ ' - ' +type+ ' - ' +date+ ' - ' +url+ ' - ' +photo500+ ' - ' + ' </li>'); 
     }); 

    }); 

}); 

Zobacz moją jsbin wiadomość dla całego skryptu: http://jsbin.com/utaju/edit

niektóre klawisze z Tumblr mają „-” myślniki w nich, i które wydają się być przyczyną problemu. Jak widać "zdjęcie-url-500" lub inny "podpis-zdjęcie" powoduje, że skrypt się psuje, to wypuszcza NaN.

Czy występuje problem z łącznikami w nazwach kluczy? Czy też wszystko robię źle?

Odpowiedz

19

Jeśli w nazwach znajdują się kreseczki, musisz uzyskać do nich inny dostęp. Zmień var photo500 = this.photo-url-500;, aby przeczytać var photo500 = this["photo-url-500"];.

+1

Działa doskonale, dziękuję bardzo! – jyoseph

1

Użyj bracket notation aby uzyskać dostęp do członków:

var photo500 = this['photo-url-500']; 
+0

Dziękuję za link, bardzo pomocny, patrząc na to teraz. – jyoseph

2

Należy pamiętać, że nie jest najlepiej, aby dołączyć wewnątrz każdej iteracji. Lepiej dołączyć do łańcucha lub popchnąć do tablicy, a następnie dodać jeden raz po zakończeniu iteratora. Dołączanie do domeny jest drogie.

+0

Więc powinienem napisać ciąg z każdą iteracją, a następnie wypisać końcowy ciąg? To solidna rada, nie myślałem o tym. Dzięki! – jyoseph