2016-12-05 2 views
0

Ich versuche, Skript zu schreiben, um Objekt durchzulaufen und zurückzugeben, welcher Typ gleich dem benutzerdefinierten Datentyp ist, der in HTML festgelegt wird. Aber ich bin nicht in der Lage, Variable mit einem Array von Objekten an meine for-Schleife übergeben. Kannst du mir bitte sagen, was mache ich falsch in diesem Code? Ich erhalte:Kann keine Variable mit JSON-Objekten an For-Schleife übergeben

nicht Eigenschaft 'Länge' undefinierter

PS lesen kann. Es hat sich in rohen JavaScript, kein jQuery

var btn = document.getElementById("btn"); 
var przepisy; 

function findData(data) { 
    var kuchnia = data.dataset.type; 
    var myRequest = new XMLHttpRequest(); 

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

      przepisy = JSON.parse(myRequest.responseText); 
     } 
    }; 

    myRequest.open('GET', 'js/przepisy.json'); 
    myRequest.send(); 


    for (i = 0; i < przepisy.length; i++) { 
     var results = ""; 
     var obj = przepisy[i]; 
     var type = przepisy.type; 

     if (type === kuchnia) { 

      results += obj.name; 

      document.write(results); 
     } 
    } 
} 
+0

Scheint wie 'przepisy' wird nicht richtig initialisiert. Können Sie das verifizieren? – 31piy

+0

Sie versuchen, auf die Ergebnisse eines asynchronen Vorgangs zuzugreifen, bevor dieser abgeschlossen wurde. – Pointy

+0

Fügen Sie zuerst Ihre Schleife in die Erfolgsrückruffunktion ein, damit ein Objekt angezeigt werden kann. Zweitens: 'przepisy = JSON.parse (myRequest.responseText);' sollte ein Objekt und kein Array zurückgeben. Um herauszufinden, wie viele Eigenschaften sich im Objekt befinden, verwenden Sie 'Object.keys (przepisy) .length'. Oder wenn Sie wirklich versuchen, ein Array zu bekommen. Sie müssen sich das Objekt in einer seiner Eigenschaften ansehen, in der das gesuchte Array gespeichert ist. –

Antwort

3

Das Problem getan werden, ist, dass Sie den Anruf an Ihre for-Schleife machen, bevor Sie die Daten wieder zu bekommen, weshalb die Länge 0. Sie sollten nur bewegen die for-Schleife in Ihre Antwort:

function findData(data) { 
     var kuchnia = data.dataset.type; 
     var myRequest = new XMLHttpRequest(); 

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

         przepisy = JSON.parse(myRequest.responseText); 

         for(i = 0; i < Object.keys(przepisy).length; i++) { 
          var results = ""; 
          var obj = przepisy[i]; 
          var type = przepisy.type; 

          if(type === kuchnia) { 

           results += obj.name; 

           document.write(results); 
         } 
        } 
      } 
     }; 

     myRequest.open('GET','js/przepisy.json'); 
     myRequest.send(); 



    } 
+0

Und verwenden Sie '.length' nicht für ein Objekt. Verwenden Sie: 'Object.keys (przepisy) .length' –

+0

Vielen Dank für die sehr schnelle Antwort, Fehler verschwinden, aber jetzt document.write feuern nicht, wenn ich die Funktion ausführen. Keine Ergebnisse. Was kann Grund dafür sein? – Ganga

+0

@ScottMarcus danke für den Vorschlag. Ich habe die Antwort aktualisiert. – BlackHatSamurai