# setInterval() will nicht



## Surras (9. Jan 2013)

Moiens!

Ich bekomm bald graue Haare. Ich komme hier einfach nicht mit der setInterval()-Funktion und AJAX-Kombination klar.

Thema ist folgendes: ich lese aus einer XML-Datei Werte aus einem Controller aus, welcher dynamisch seine Zustände ändert. Alles auch kein Problem, der Wert wird ausgelesen und sobald man die Seite neu läd wird auch der neue Wert angezeigt (ist ein WaGo-Controller).

Allerdings habe ich hier ein Video gefunden: CoDeSys / WAGO Visualizations using Java script, SSI & XML - YouTube

in dem Video aktualisiert er seine Werte mit der Intervall-Funktion. Jetzt hab ich das auf eigene Faust probiert und wollte das selbige tun, nur macht er es bei mir nicht.

Code kommt hier:


```
<!DOCTYPE html>
	<head>
		<script>
		
		
			function doIt(datei){
				var http;
				var text = "";
				var cam;
				var myXML;
				var temp;
				
				//XML-Objekt erzeugen
				if (window.XMLHttpRequest) { //Browser-Check für Firefox, IE7+,  Chrome, Opera,...
					http = new XMLHttpRequest();
				} else if (window.ActiveXObject) { //älteren IE-Browser
					http = new ActiveXObject("Microsoft.XMLHTTP");
				}
				
				
				http.onreadystatechange = ausgeben;
				http.open("GET", datei, true);
				http.send();
				var int = self.setInterval("ausgeben()", 250);

					
					function ausgeben() { //Funktion, welche ausgeführt wird, sobald der Status sich ändert
						if (http.readyState == 4 && http.status == 200) { //erst wenn Status 4 (fertig geladen) erreicht ist, ausführen
							//fülle Objekt 'cam' durch dem 'XML-Response' vom 'XML-Objekt' mit dem Element "kamera" (aus dem Gesamten Dokument ('documentElement'))
							cam = http.responseXML.documentElement.getElementsByTagName("kamera");
							
							
							
							//Zählschleife um Objekte nach einander zu durchsuchen
							for(var i = 0; i < cam.length; i++) {
								temp = cam[i].getElementsByTagName("id"); //hole Element "id" aus dem "kamera"-Tag (s.o.) mit dem index der Zählschleife
								text = text + temp[0].firstChild.nodeValue; //nehme den ersten Unterknoten, aus der Überkategorie in 'temp' (also aus "kamera")
								
								temp = cam[i].getElementsByTagName("name"); //hole Element "name" aus dem "kamera"-Tag (s.o.) mit dem index der Zählschleife
								text = text + temp[0].firstChild.nodeValue;
								
								temp = cam[i].getElementsByTagName("hersteller"); //hole Element "hersteller" aus dem "kamera"-Tag (s.o.) mit dem index der Zählschleife
								text = text + temp[0].firstChild.nodeValue;
								
								temp = cam[i].getElementsByTagName("irfilter"); //hole Element "id" aus dem "kamera"-Tag (s.o.) mit dem index der Zählschleife
								text = text + temp[0].firstChild.nodeValue; //nehme den ersten Unterknoten, aus der Überkategorie in 'temp' (also aus "kamera")
								
								text = text + "<br>"; //Zeilenumbruch anhängen
							}
							//}, 300);
							
							document.write(text);
						}
						
					}

			}
				 
			
		</script>
	</head>
	<body onload="doIt('datei.xml')">
		<div id="inhalt">
		
			
		</div>
	</body>
</html>
```

Kann mir jemand helfen, wo hier der Dreher drin ist? Danke sehr!

PS: sry für die weiten Tabs, aber in Notepad++ arbeite ich immer mit Tabulator...


----------



## sence (9. Jan 2013)

nicht sicher aber versuch mal:


```
var int=self.setInterval(function(){ausgeben()},1000);
```


----------



## jwiesmann (10. Jan 2013)

mhhh .. müsste es nicht eher 
[XML]var int = self.setInterval("doit()", 250);[/XML]
lauten? 
Sonst wird dein Request ja nur einmal ausgeführt ... und der Inhalt bleibt immer der Gleiche.
Entweder packst du deinen AJAX Request mit in deine "ausgeben" Funktion, oder änderst den Aufruf.

Edit: Ach Quatsch .. hab nix gesagt


----------

