Durch JSON iterieren (loopen)
juppix
- javascript
Heyho... wieder er...:
Ich habe ein JSON:
[
{
name: "Riesser",
vorname: "Ahamed",
text_long: "Boss"
},
{
name: "Hetz",
vorname: "Ralf",
text_long: "Manager"
},
{
name: "Soller",
vorname: "Hans",
text_long: "Junior"
}
]
Dies erhalte ich per AJAX-Request.
Da mehr als 1 Wert zurück kommen kann (hier im Beispiel 3), möchte ich nun durch die Werte "laufen" und etwas damit machen.
Leider klappt mein Code nicht ganz (kein Console-Log - es wird nix gefunden obwohl natürlich JSON zurück geliefert wird.):
$.ajax({
type:'GET',
url:'getUserInfo.php?UserId=' + $("#SelectKonto option:selected").val() + '&datum=' + $("#Datepicker").val(),
dataType: "json",
success: function(data){
//console.log(data.length);
if(data.length = 0) {
console.log('no data');
} else {
console.log('data');
for (var key in data) {
if (p.hasOwnProperty(key)) {
console.log(key + " -> " + p[key]);
// MACH HIER ETWAS !!
}
}
}
},
error: function() {
alert("Error!: WriteError()");
}
});
Kann mir jemand auf die Sprünge helfen?
1000 Dank vorab 😀
hallo
for (var key in data) { if (p.hasOwnProperty(key)) { console.log(key + " -> " + p[key]); // MACH HIER ETWAS !! } }
data ist ein Array, kein Object.
Erst die einzelnen data Items sind Objects.
Tach!
Ich habe ein JSON:
Erstmal, dass es JSON ist, ist für das Problem irrelevant. JSON ist es nur für den Transport, und du bekommst ganz normale Daten in Javascript-Typen.
[ { name: "Riesser", vorname: "Ahamed", text_long: "Boss" }, { name: "Hetz", vorname: "Ralf", text_long: "Manager" }, { name: "Soller", vorname: "Hans", text_long: "Junior" } ]
Das wird konvertiert zu einem Array mit drei Elementen, die Objekte sind.
for (var key in data) { if (p.hasOwnProperty(key)) { console.log(key + " -> " + p[key]); // MACH HIER ETWAS !! } }
Da sollte zumindest length
kommen, denn du versuchst mit diesem Code über die Eigenschaften des Arrays zu iterieren. Das hat aber außer length
keine (eigenen). Stattdessen möchtest du beispielsweise die Methode forEach() nehmen, um über die Elemente des Arrays zu iterieren.
data.forEach(function(element) {
console.log(element);
});
dedlfix.
Passiert nix wenn ich den code ausführe:
success: function(data){
//console.log(data.length);
if(data.length = 0) {
console.log('no data');
} else {
console.log('data');
data.forEach(function(element) {
console.log(element);
});
}
Es wird lediglich "data" in der console geloggt. 😟
hallo
Passiert nix wenn ich den code ausführe:
success: function(data){ //console.log(data.length); if(data.length = 0) {
Hier ist etwas logisch falsch!
Verstehe ich nicht ganz was Du meinst.
In diesem Code wird "data ok!" ja schon korrekt ausgegeben. Jedoch scheint die forEach-Schleife nicht zu laufen…
success: function(data){
//console.log(data.length);
if(data.length = 0) {
console.log('no data!');
} else {
console.log('data ok!');
data.forEach(function(element) {
console.log(element);
});
}
}
hallo
Verstehe ich nicht ganz was Du meinst.
In diesem Code wird "data ok!" ja schon korrekt ausgegeben. Jedoch scheint die forEach-Schleife nicht zu laufen…
success: function(data){ //console.log(data.length); if(data.length = 0) { console.log('no data!'); } else { console.log('data ok!');
} }
var o = [];
if(o.length=0){alert("0")}
else(alert("!0"))
Willst du wetten, welche Alert-Box ausgegeben wird?
LOL! Cool. Daaanke!
Aber wie frage ich denn nun ab ob data Elemente hat (also nicht leer ist)?
hallo
LOL! Cool. Daaanke!
Aber wie frage ich denn nun ab ob data Elemente hat (also nicht leer ist)?
negativer Test
o.length == 0
positiver Test
o.length > 0
Tach!
Aber wie frage ich denn nun ab ob data Elemente hat (also nicht leer ist)?
Gar nicht. Du iterierst einfach drüber (eventuell ein Test auf null/undefined). Es sei denn, du möchtest bei 0 Elementen etwas anderes als nichts darstellen.
dedlfix.
hallo
Tach!
Aber wie frage ich denn nun ab ob data Elemente hat (also nicht leer ist)?
Gar nicht. Du iterierst einfach drüber (eventuell ein Test auf null/undefined). Es sei denn, du möchtest bei 0 Elementen etwas anderes als nichts darstellen.
Du willst sagen, Man will eben nicht etwas Überflüssiges (etwa eine leere Tabelle) präsentieren, wenn keine Daten vorliegen
Aber da solche Typos (= statt ==) so verbreitet sind, und schwer zu bemerken sind, hier eine Referenz
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
Kann ja nicht schaden...
@@juppix
In diesem Code wird "data ok!" ja schon korrekt ausgegeben.
if(data.length = 0) { console.log('no data!'); } else { console.log('data ok!');
Natürlich. Du weist data.length
den Wert 0
zu. Dieser Wert wird auch als Ergebnis der Zuweisung zurückgegeben. 0
ist falsy, d.h. bei if(0)
landest du immer im else-Zweig, es wird immer „data ok!“ ausgegeben.
Du möchtest nicht zuweisen, sondern vergleichen: ===
.
LLAP 🖖
Natürlich. Du weist
data.length
den Wert0
zu. Dieser Wert wird auch als Ergebnis der Zuweisung zurückgegeben.0
ist falsy, d.h. beiif(0)
landest du immer im else-Zweig, es wird immer „data ok!“ ausgegeben.
Das erklärt wieso der else-Zweig betreten wird, es erklärt auch warum die for-Schleife nicht ausgeführt wird: Mit data.length = 0
werden alle Elemente aus dem Array gelöscht.
Tach!
console.log('data');
Es wird lediglich "data" in der console geloggt. 😟
Dann lass dir anzeigen, was in data
wirklich enthalten ist, also console.log(data)
.
dedlfix.