Javascript Problem

OP #4206524
Lesenswert?

Hallo zusammen,

da ich noch nicht so wirklich mit Javascript gearbeitet habe, komme ich 
bei einem möglichen einfachen Problem nicht weiter und hoffe hier könnte 
mir jemand helfen!
1
<script language="JavaScript">
2
    <!--
3
        var mylabels = new Array();
4
        var myvalues = new Array();
5
        function getMeasureVal() {
6
        var request = false;
7
        function measureComplete() {
8
            if (request.readyState == 4) {
9
                if (request.status == 200) {
10
                    alert(request.responseText);
11
                }
12
            }
13
        }
14
        if (window.XMLHttpRequest) {
15
            request = new XMLHttpRequest();
16
        }
17
        else if (window.ActiveXObject) {
18
            request = new ActiveXObject("Microsoft.XMLHTTP");
19
        }
20
        if (request) {
21
            request.open("GET", "/measuervaluesget?id=" + Math.random(), true);
22
            request.onreadystatechange = measureComplete;
23
            request.send(null);
24
        }
25
    }
26
    
27
    var lineChartData = {
28
        labels : mylabels,
29
        datasets : [
30
            {
31
                label: "My Second dataset",
32
        fillColor : "rgba(151,187,205,0.2)",
33
        strokeColor : "rgba(151,187,205,1)",
34
        pointColor : "rgba(151,187,205,1)",
35
        pointStrokeColor : "#fff",
36
        pointHighlightFill : "#fff",
37
        pointHighlightStroke : "rgba(151,187,205,1)",
38
        data : myvalues
39
            }
40
        ]
41

42
    }
43
    
44
    window.onload = function {
45
        var ctx = document.getElementById("diagrammMessung").getContext("2d");
46
        window.myLine = new Chart(ctx).Line(lineChartData, {
47
            responsive: true
48
        });
49
    }
50
    //-->
51
    </script>
Die Daten die ich haben möchte bekomme ich auch, da ich diese oben mit 
alert() auch ausgeben kann. Jetzt weiß ich nur nicht wie ich die Daten 
in die beiden Arrays myvalues und mylabels bekommen soll... Habs mit 
push etc. probiert aber es wollte nicht so wie ich es wollte! Hoffe 
jemand könnte mir helfen. :-)

Gruß KK
Gast #4206525
Lesenswert?

Kilian K. schrieb:
> Jetzt weiß ich nur nicht wie ich die Daten
> in die beiden Arrays myvalues und mylabels bekommen soll... Habs mit
> push etc. probiert aber es wollte nicht so wie ich es wollte! Hoffe
> jemand könnte mir helfen. :-)

dafür müssen man wissen was in responseText drin steht.
#4206727
Lesenswert?

Kilian K. schrieb:
> window.onload = function {

Syntaxfehler. Korrekt wäre:
window.onload = function(){

Kilian K. schrieb:
> [[zeit, messwert], [zeit,messwert],...]

Sieht nach gültigen json arrays aus. Welche lib wird für die charts 
Verwendet?

Ich würde volgendes Versuchen:
1
var chart,myLine,myLine2;
2
       function measureComplete() {
3
            if (request.readyState == 4) {
4
                if (request.status == 200) {
5
                    myLine2 = chart.Line(JSON.parse(request.responseText), {
6
                      responsive: true
7
                    });
8
                }
9
            }
10
        }
11

12
// ....
13

14
    window.onload = function {
15
        var ctx = document.getElementById("diagrammMessung").getContext("2d");
16
        chart = new Chart(ctx);
17
        myLine = chart.Line(lineChartData, {
18
            responsive: true
19
        });
20
    }
#4206741
Lesenswert?

PS: Das Codedesign ist ausbaufähig. Das ganze könnte in OOP verpackt 
werden, es gibt ünnötige verwendungen von Globalen und window. Der 
compatiblity code beim XMLHttpRequest ist nutzlos, weil das verwendete 
canvas mit den alten briwsern sowisonicht geht, un window.onload kann 
durch addEventListener("load"  ersetzt werden.
OP #4207123
Lesenswert?

Also die Werte schicke ich jetzt z.B. so weg
1
{ 
2
"Zeit": [ 6.00,24.00,40.00,58.00,76.00,92.00,110.00,128.00,144.00,162.00],
3
 "Messwert": [ 992.00,991.00,991.00,991.00,992.00,992.00,991.00,991.00,992.00,992.00]
4
}
Wie bekomme ich jetzt in Javascript meine Werte daraus gefiltert damit 
ich sie in meine Arrays schreiben kann?
1
<script language="JavaScript">
2
    <!--
3
        function getMeasureVal(){
4
            var request = false;
5
            function measureComplete() {
6
                if (request.readyState == 4) {
7
                    if (request.status == 200) {
8
                       alert(request.responseText);
9
                    }
10
                }
11
            }
12
            request = new XMLHttpRequest();
13
        
14
            if (request) {
15
                request.open("GET", "/measurevaluesget?id=" + Math.random(), true);
16
                request.onreadystatechange = measureComplete;
17
                request.send(null);
18
            }
19
            else{
20
                alert("no request");
21
            }
22
        }
23
        
24

25
        var lineChartData = {
26
            labels : [1,2,3,4,5,6,7,8,9],
27
            datasets : [
28
                {
29
                    label: "My Second dataset",
30
                    fillColor : "rgba(151,187,205,0.2)",
31
                    strokeColor : "rgba(151,187,205,1)",
32
                    pointColor : "rgba(151,187,205,1)",
33
                    pointStrokeColor : "#fff",
34
                    pointHighlightFill : "#fff",
35
                    pointHighlightStroke : "rgba(151,187,205,1)",
36
                    data : [0.6,5,3,8,9,5,0.6,10,7,1]
37
                }
38
            ]
39
        }
40
            
41
        window.onload = function() {
42
            var ctx = document.getElementById("diagrammMessung").getContext("2d");
43
            window.myLine = new Chart(ctx).Line(lineChartData, {
44
                responsive: true
45
            });
46
        }
47
    //-->
48
    </script>
#4207378
Lesenswert?

Ich halte die chart.js lib hier für ungeeignet. Du hast Zeitpunkte 
(X-Achse) und Messwerte (Y-Achse) dazu. charts.js erwartet bei line 
charts jedoch nur die werte für die Y-Achse, wobei alle Punkte auf der 
X-Achse gleichweit entfernt sind. Einen geeigneten Charttyp gibt es in 
chart.js noch nicht (wobei man einen erstellen könnte, aber das wird zu 
aufwendig).
OP #4220745
Lesenswert?

Mein Problem momentan ist, wenn ich das so mache wie in meinem Post 
darüber, bekomme ich immer das ausgegeben:
1
婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚婚
Woran könnte das liegen?
OP #4223141
Lesenswert?

So, momentan bin ich soweit, dass ich diesen Text
1
{ 
2
"Zeit": [ 42.00,60.00,77.00,95.00,112.00,129.00,147.00,164.00,181.00,199.00],
3
"Messwert": [ 995.00,995.00,995.00,995.00,994.00,995.00,995.00,995.00,995.00,995.00]
4
}
 mit alert() ausgeben kann.

Da ich aber noch nicht viel mit JavaScript gearbeitet habe, weiß ich 
jetzt nicht wie ich jeweils die Zeitwerte und die Messwerte in zwei 
Arrays schreiben aufteilen kann. Vielleicht hat das jemand schon mal 
gemacht und könnte mir helfen? :-D
OP #4231213
Lesenswert?

Hallo, ich habe leider noch ein weiteres Problem entdeckt!

Hier erst nochmal ein Teil meines Codes:
1
function getValues() {
2
  "use strict";
3
    var request = false,
4
    mylabels = [],
5
    myvalues = [];
6
  
7
    function measureComplete() {
8
        if (request.readyState === 4) {
9
            if (request.status === 200) {
10
        var data = JSON.parse(request.responseText),
11
          i = 0,
12
          anzahlWerte = 0;
13
        
14
        anzahlWerte = data.Anzahl;
15
        
16
        for (i = 0; i < anzahlWerte; i += 1) {
17
          mylabels.push(data.Zeit[i]);
18
          myvalues.push(data.Messwert[i]);
19
        }
20
        
21
        drawDiagramm(mylabels, myvalues);
22
        
23
        document.getElementById("DruckMittelwert").firstChild.nodeValue = data.Mittelwert;
24
        document.getElementById("DruckFlaeche").firstChild.nodeValue = data.Flaeche;
25
        document.getElementById("DruckMax").firstChild.nodeValue = data.Max;
26
        document.getElementById("DruckZeit").firstChild.nodeValue = data.ZeitGesamt;
27
        document.getElementById("DruckStoesselZeit").firstChild.nodeValue = data.StoesselZeit;
28
            }
29
        }
30
    }
31
    request = new XMLHttpRequest();
32
        
33
    if (request) {
34
        request.open("GET", "/getvalues?id=" + Math.random(), true);
35
        request.onreadystatechange = measureComplete;
36
        request.send(null);
37
    }
38
}
39

40
function startMeasure() {
41
  "use strict";
42
  var request = false;
43
  
44
  window.myLine.destroy();
45
  
46
  request = new XMLHttpRequest();
47
  
48
  if (request) {
49
    request.open("GET", "/startmeasure?id=" + Math.random(), true);
50
    request.send(null);
51
    
52
    getValues();
53
  }
54
}

Also "startMeasure()" soll nur ausgeführt werden wenn ich einen Button 
betätige und "getValues()" wird einmal beim laden der Seite und von 
"startMeasure()" ausgeführt.

Allerdings tritt manchmal der Fall ein, dass wenn ich auf den Button 
klicke, "startMeasure()" aufgerufen wird, danach dann "getValues()" und 
danach dann "startMeasure()" ein weiteres mal. Dies sollte eigentlich 
nicht passieren. Es ist auch nicht jedesmal. Ich finde aber auch nicht 
den Fehler, deshalb hoffe ich, dass hier vielleicht jemand den Fehler 
findet.

MfG Kilian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren