2016-07-20 6 views
0

So versuche ich, Daten von einem Server im JSON-Format zu holen.JavaScript-Code nicht in der Reihenfolge

mit diesem Code

for (var i = 0; i < hosts.length; i++) { 
    var tempUrl = url + hosts[i]; 
    jQuery.ajax({ 
     type : "GET", 
     dataType : "json", 
     username : "user", 
     password : "password", 
     url : url, 
     async : true, 
     success : function (data) { 
      //var obj = data.data.host.status; 
      //console.log(obj); 
      jsonHosts.push(data.data); 
      console.log("added data"); 
     } 
    }); 
} 

von diesem Codeblock gefolgt

for (var i = 0; i < jsonHosts.length; i++) { 
      console.log("dog"); 
      console.log(jsonHosts[i].host.status); 
      document.getElementById('test').innerHTML += "<br>" + jsonHosts[i].host.status; 
      document.getElementById('test').innerHTML += '<br>Some new content!'; 
     } 
     console.log("done"); 

Problem ist, wird meine Konsole zeigen "fertig" und dann "hinzugefügten Daten" und meine Webseite wird leer sein.

Ich habe versucht, den ersten Abschnitt in eine Funktion zu setzen und zu versuchen, meinen Code auf die Ausführung der Funktion warten zu lassen, aber ohne Erfolg.

trotzdem kann ich diesen Code machen, um/haben den zweiten Block Warten auf den ersten Block auszuführen

+0

Das ist der ganze Sinn eines Callback. Die "Erfolg" -Funktion wird aufgerufen, wenn die AJAX-Anfrage abgeschlossen ist. Dort müssen Sie den Code eingeben, der von der Anforderung abhängig ist. Sie können es auf eine andere Funktion richten, wenn dies die Verwaltung erleichtert. – moopet

+1

Asynchrone Anrufe ... Was Sie getan haben, ist eine Pizza online bestellt. Sobald du auf submit drückst, versuchst du, die Pizza zu essen, die noch nicht in dein Haus geliefert wurde. – epascarello

+0

Durch die Deaktivierung von Async wurde das Problem behoben. Ich bin neu zu Web-Entwickler, so dass ich dieses besondere nicht bewusst war. Vielen Dank für Ihre Hilfe –

Antwort

1

Verschieben unten Teil des Codes in Erfolg Callback-Funktion

success : function (data) { 
    //var obj = data.data.host.status; 
    //console.log(obj); 
    jsonHosts.push(data.data); 
    for (var i = 0; i < jsonHosts.length; i++) { 
     console.log("dog"); 
     console.log(jsonHosts[i].host.status); 
     document.getElementById('test').innerHTML += "<br>" +  jsonHosts[i].host.status; 
     document.getElementById('test').innerHTML += '<br>Some new content!'; 
    } 
    console.log("done"); 
} 
+0

überprüfen Sie die Antwort erneut –

+0

Und die Daten würden bei jedem Ajax-Aufruf dupliziert werden, erster Ajax-Aufruf, den Sie an das Array und die Schleife anhängen. Der zweite Anhang wird angehängt und so wiederholt, dass das erste Element wieder hinzugefügt wird. Wie das ist die ausgewählte Antwort .... – epascarello

0

Die Ajax ist async so die Erfolgsfunktion nach der Schleife läuft. versuchen Sie dies:

for (var i = 0; i < hosts.length; i++) { 
     var tempUrl = url + hosts[i]; 
     jQuery.ajax({ 
      type : "GET", 
      dataType : "json", 
      username : "user", 
      password : "password", 
      url : url, 
      async : true, 
      success : function (data) { 
       //var obj = data.data.host.status; 
       //console.log(obj); 

      console.log("done"); 
       jsonHosts.push(data.data); 
       console.log("added data"); 
       DataCame(jsonHosts); 
      } 
     }); 
    } 

function DataCame(jsonHosts){ 
for (var i = 0; i < jsonHosts.length; i++) { 
        console.log("dog"); 
        console.log(jsonHosts[i].host.status); 
        document.getElementById('test').innerHTML += "<br>" + jsonHosts[i].host.status; 
        document.getElementById('test').innerHTML += '<br>Some new content!'; 
       } 
} 
+0

Und jetzt hat das OP doppelte Ergebnisse erzielt. – epascarello

+0

OK, während dies * funktioniert * für meinen oben abgeschnittenen Code, möchte ich wirklich ein Array haben, mit dem ich arbeiten kann, weil dies ein Demo-Fall ist und plane, die Daten zu holen, etwas zu verarbeiten und dann auf diese Weise auszudrucken kann nur an den Daten arbeiten, wie es kommt. –

Verwandte Themen