• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Javascript jak wyświetlić, wszystkie elementy z obiektu JSON

Object Storage Arubacloud
0 głosów
1,945 wizyt
pytanie zadane 14 maja 2018 w JavaScript przez danielb Bywalec (2,520 p.)
zamknięte 17 maja 2018 przez danielb

Witam serdecznie, mam taki problemik, a mianowicie, pobieram dane z zewnętrznego pliku JSON, i chcę wyświetlić całą zawartość jego treści, o ile z pobraniem danych nie mam problemu, to z wyświetleniem tego już tak, koniecznie zależy mi, na tym, aby to było wyświetlane poprzez document.getElementById.

Tak używam pętli for, do ustalenia ilości pozycji, i length, ale gdy używam tej metody, to pokazuje mi tylko ostatni element, z pozycji, a gdy użyłem, aż wstyd się przyznać, document.,write, zadziałało i pokazało mi wszystkie pozycje, ale przeładowuje mi stronę :-( a nie o to mi chodzi, dodam iż nie używam Jquery.

Dodaje fragment kodu:

for(var x=0; x<= create_obj_js.users.length; x++){
    document.getElementById("view").innerHTML= create_obj_js.users[x].name;
}

A tu jest JSON:

{"users":
[
	{"name":"Daniel"},
	{"name":"Iza"},
	{"name":"Ewa"}
]
}

 

komentarz zamknięcia: Nadmierne trudności, w używaniu tej technologii, w projekcie.
komentarz 14 maja 2018 przez danielb Bywalec (2,520 p.)
edycja 14 maja 2018 przez danielb

Dziękuje za tak liczny odzew, ale chyba popełniłem błąd, nie podając szerszego kontekstu, ale popróbuje wszystkie propozycje, podaje cały skrypt JS.

	// Javascript

function myfunction(){

	var xhttp;

		if (window.XMLHttpRequest) {
    		xhttp = new XMLHttpRequest();
    	} else {
    		// code for IE6, IE5create_obj_js.users
    	xhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		

		xhttp.onreadystatechange = function(){
			if(xhttp.readyState == 4 && xhttp.status == 200){

				var requestjson = xhttp.responseText;
				var create_obj_js = JSON.parse(requestjson); // <- Create object JS.

				for(var x=0; x<= create_obj_js.users.length; x++){
					document.getElementById("view").innerHTML= create_obj_js.users[x].name;
				}

			}
			
		}

	xhttp.open("GET", "data.json", true);
	xhttp.send();

}

A co do let, to tak wiem, że teraz powinno się jej używać, zamiast var, ale słyszałem że coś Android jej nie lubi.

A ten projekt, który sobie robię, ma być to taki manager zadań, wpisujemy co mamy zrobić, a potem będziemy sobie odznaczać, a przynajmniej taka jest teoria, ale jak widzicie no jeszcze daleko mi, do takiej funkcjonalności, w wypadku awaryjnym, zrobię to na MySql, którego bardziej ogarniam i php.

4 odpowiedzi

0 głosów
odpowiedź 14 maja 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)
wybrane 17 maja 2018 przez danielb
 
Najlepsza

Spróbuj tak:

let users = [
    {"name":"Daniel"},
    {"name":"Iza"},
    {"name":"Ewa"}];
users.filter((user)=>{
 document.getElementById("view").innerHTML=   document.getElementById("view").innerHTML + "<br/>"+ user.name;
});
<div id="view">
</div>

link do codepen: https://codepen.io/anon/pen/rvrMqE

 

komentarz 14 maja 2018 przez Tomek Sochacki Ekspert (227,510 p.)
A jaki sens ma tu metoda filter, która de facto zwróci Ci pustą tablicę, ponieważ z callback robisz return undefined co przekonwertuje się do false?
komentarz 14 maja 2018 przez danielb Bywalec (2,520 p.)

@Igor Gawrys,  Ta propozycja, wygląda na obiecującą, wyświetla wszystko super, tylko że ja mam dane w zewnętrznym JSON, i  przycisk w html-u który odpala tą całą funkcje, zamiast podmienić zawartość div-a view, dodaje mi ciągle dane, i tak mogę nim spamować, :-) po kliknięciu w przycisk, ale chyba jesteśmy na dobrym tropie.

komentarz 14 maja 2018 przez Igor Gawrys Stary wyjadacz (12,460 p.)

Poprawione codepen: https://codepen.io/anon/pen/rvrMqE smiley

0 głosów
odpowiedź 14 maja 2018 przez raftom Użytkownik (660 p.)

ta linijka z getElementById to według mnie coś takiego

var tmp = '';
for(var x = 0; x <= 10; x++) {
    tmp = x;
}

widzisz teraz co masz źle :) ?

var names = '';
for(var x = 0; x <= create_obj_js.users.length; x++) {
    names += create_obj_js.users[x].name + ', ';
}
//tutaj sobie usuń ostatni przecinek
document.getElementById('view').innerHTML = names;

sprawdź czy literówki po drodze nie strzeliłem

0 głosów
odpowiedź 14 maja 2018 przez pablop76 VIP (123,180 p.)
Użyj += do zmiany html ponieważ tak nadpisuje Ci kolejno, aż do ostatniego a Ty musisz je połaczyć.
komentarz 14 maja 2018 przez danielb Bywalec (2,520 p.)
Fakt, faktem działa, ale zamiast zastępować div-a, dodaje dane, a dodatkowo mam przycisk, od wywoływania tej funkcji, przy pomocy którego, można spamować tymi danymi.
0 głosów
odpowiedź 14 maja 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Ja proponuję podejść do problemu inaczej. Najpierw obrób sobie dane pozyskane z zewnątrz i stwórz np. tablicę zawierającą imiona:

//Tutaj mamy nasz obiekt pozyskany z zewnątrz:
const obj = {"users":
[
    {"name":"Daniel"},
    {"name":"Iza"},
    {"name":"Ewa"}
]
};

//Tutaj tworzymy stałą names zawierającą tylko imiona:
const names = obj.users.map(({name}) => name);

I teraz w miejscu, gdzie chcesz je wyświetlić robisz po prostu:

document.getElementById('view').textContent = names.join(', ');

W ten sposób masz rozdzielone miejsce trzymania wejściowych danych, ich obróbki i wyświetlania. Za chwilę może zdarzyć się, że jakiś inny komponent na stronie będzie potrzebował np. imion posortowanych jakoś, albo tylko pierwszych trzech itp. to ponownie użyjesz naszej tablicy "names" bez konieczności ponownego iterowania pętlą for.

Dodatkowo korzystając z tablicy i metody Array.prototype.join nie masz problemu z usuwaniem końcowego przecinka (można by to łatwo machnąć regexp ale byłoby to mało uniwersalne). W ten sposób za chwilę możesz imiona wyświetlać w dowolny inny sposób - wystarczy zmienić parametr metody join() i voila, reszta kodu zostaje bez zmian.

komentarz 17 maja 2018 przez danielb Bywalec (2,520 p.)
Dziękuję, za wszystkie propozycje odpowiedzi, ale niestety jakoś m, nie idzie efektywne wdrażanie, tej technologii, w projekcie, znacznie bardziej efektywniejsze, dla mnie okazało się być,PHP i MySql, które to o wiele lepiej znam.

Podobne pytania

0 głosów
2 odpowiedzi 449 wizyt
pytanie zadane 29 października 2017 w JavaScript przez Decay Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 384 wizyt
0 głosów
1 odpowiedź 1,594 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...