2016-12-13 9 views
0

Ich versuche, ein kurzes Skript zu schreiben, um einige Daten zu erhalten. Die Idee ist, anstatt viele JavaScript-Dateien zu schreiben und ich muss immer die ID in den Link hartcodieren, ich dachte, es muss möglich sein, eine Variable in den Link einzufügen. Jetzt habe ich das Problem, ich sehe nur den letzten Wert meiner var, da es so aussieht, als würde die Variable die ganze Zeit überschrieben werden, anstatt einfach die ID zur Ausgabe hinzuzufügen. Ich hoffe ihr könnt mir helfen. HierJavascript überschreibt meine Daten

ist der Code:

myConnector.getData = function(table, doneCallback) { 
    var date = new Date(); 
    edate = date.toISOString().slice(0,10) + "-23-59-59"; 

    var ids = ["3775", "6697"] 
    for (i = 1; i < ids.length; i++) 
    var id_temp = ids[i]; 
    { 

    $.getJSON("https://****/api/historicdata.json?id="+id_temp+"&avg=0&sdate=2016-12-12-00-00-00&edate="+edate+"&username=***&passhash=****", function(resp) { 

     var feat = resp.histdata, 
     tableData = []; 

     // Iterate over the JSON object 
     //String id = UUID.randomUUID().toString(); 
     for (var j = 0, len = feat.length; j < len; j++) { 
     tableData.push({ 
      //"no"  : j, 
      "ids" : id_temp, 
      "datetime": feat[j].datetime, 
      "value": feat[j].value, 
      "value_raw": feat[j].value_raw, 
      "coverage": feat[j].coverage, 
      "coverage_raw": feat[j].coverage_raw 


     }); 
     } 

     table.appendRows(tableData); 

    }); 

    }; 
    doneCallback(); 
}; 
+3

Bitte den richtigen Code einrücken ly. – Tomalak

+2

Das doneCallback() ist nutzlos, solange es sich nicht im asynchronen $ .getJSON() - Teil befindet. – Lain

Antwort

2

Das Problem ist, dass id_temp nur mit dem letzten Wert gesetzt wird, weil { an der falschen Stelle ist. Diese

:

var ids = ["3775", "6697"] 
for (i = 1; i < ids.length; i++) 
    var id_temp = ids[i]; 

{ 

Sollte sein:

var ids = ["3775", "6697"] 
for (i = 1; i < ids.length; i++) 
{ 
    var id_temp = ids[i]; 
    //... rest of loop ... 
+0

Ich habe versucht, aber immer noch nur die letzte var angezeigt – cyberoner1

+0

Wo ist das letzte var zeigt? Haben Sie außerdem sichergestellt, dass Sie keine zwischengespeicherte Version des bearbeiteten JavaScript erhalten haben? D. h., Erinnern Sie sich an Strg + F5 (Firefox), um sicherzustellen, dass Ihr neuer Code läuft und nicht eine zwischengespeicherte Kopie. – varlogtim

+0

Dies ist ein Problem, aber keineswegs das einzige. Das grundlegende Problem ist, wie er die Abfolge von Async-Aufrufen behandelt. –

1

es das Problem, das den gesamten Code für Schleife nicht im Inneren, Ihre for-Schleife haben nur eine Zeile

Verwendung

var ids = ["3775", "6697"] 
for (i = 1; i < ids.length; i++) 
{ 
    var id_temp = ids[i]; 
    $.getJSON("https://****/api/historicdata.json?id="+id_temp+"&avg=0&sdate=2016-12-12-00-00-00&edate="+edate+"&username=***&passhash=****", function(resp) { 
+0

Dies ist ein Problem, aber keineswegs das einzige. –

+0

Ich stimme dir zu, aber durch die Frage OP, dass "Javascript meine Daten überschreiben" und die Antwort ist dafür, warum es überschrieben oder warum nur letzte ID verwendet wurde. – Viplock

+0

Nun, es ist das erste Mal, dass ich Java schreiben muss, tut mir leid, wenn ich etwas vermisse oder es nicht richtig verstehe. Das Sxript ist ein Web-Daten-Connector, den ich für Tableau verwende. Ich habe einen Simulator auf meinem PC installiert, wo ich das Skript ausführen kann, um die Ausgabe zu sehen. Und jedes Mal, wenn ich dieses Skript ausführe, sehe ich als Ausgabe die ID 6697. Ich habe die IDs umgeschaltet, nur um sicher zu sein, dass es ein Überschreibungsproblem ist und das Ergebnis war, dass die letzte ID erneut angezeigt wurde. Deshalb denke ich, dass ich die Daten überschreibe – cyberoner1

Verwandte Themen