JavaScript Wo ist der Fehler?

chr1zZo

Banned
Registriert
Feb. 2009
Beiträge
4.688
<SCRIPT LANGUAGE="JavaScript">
{
var BaseURL = "http://192.168.0.192/";
var queuePanel2= "";

queuePanel2= '<p>Test</p>'
queuePanel2 += '<form name="ctlstatusform"></form>'
queuePanel2 += '<tr><td class="oddItem" nowrap="">Status in queue</td>'
queuePanel2 += '<td class="oddItem" nowrap=""><input type="text" disabled="" size="65" value="" name="status"></td>'
queuePanel2 += '<td class="oddItem" nowrap="">Position in queue</td>'
queuePanel2 += '<td class="oddItem" nowrap=""><input type="text" disabled="" size="10" value="" name="pos"></td></tr>'
queuePanel2 += '<tr><td class="oddItem" nowrap="">Time remaining:</td>'
queuePanel2 += '<td class="oddItem" nowrap=""><input type="text" disabled="" size="65" value="" name="tleft">seconds</td>'
queuePanel2 += '<ACTION="'
queuePanel2 += BaseURL;
queuePanel2 += 'axis-cgi/com/ptzqueue.cgi?control=request&camera=1" name="ctlreqForm" METHOD="POST" form target="Temp">'
queuePanel2 += '<td class="oddItem" nowrap="" align="right" colspan="2">'
queuePanel2 += '<input type="hidden" value="request" name="control">'
queuePanel2 += '<input type="hidden" value="1" name="camera">'
queuePanel2 += '<input type="hidden" value="yes" name="tagresponse">'
queuePanel2 += '<input class="btnLarge" type="button" onclick="JavaScript:ctlReq(this.form)" value="Request control" name="label">'
queuePanel2 += '<ACTION="'
queuePanel2 += BaseURL;
queuePanel2 += 'axis-cgi/com/ptzqueue.cgi?control=query&camera=1" name="periodicForm" METHOD="POST" form target="Temp">'
queuePanel2 += '<input type="hidden" value="query" name="control">'
queuePanel2 += '<input type="hidden" value="yes" name="tagresponse">'
queuePanel2 += '<input type="hidden" value="1" name="camera">'
queuePanel2 += '</form>'

}
document.write(queuePanel2);

</script>

Ist ein Formular das eine Warteschlange ausgeben soll! Jemand eine Idee?
 
@chriz0101:
<totaler klugscheissmodus>
wie soll überhaupt hinter einer Zeile was stehen? ^^
aber an sich seh ich fünf Semikolons an Zeilenenden ;-)
</totaler klugscheissmodus>

Aber dein Einwand wird schon berechtigt sein, und vor allem der Hinweis, dass man sich ja sogar anzeigen lassen kann, was der Browser am Code bemängelt...

@chr1zZo
"Wo ist der Fehler?" usw ist nicht wirklich eine Problembeschreibung...
 
Ja, sorry 1668mib! Nunja, es spuckt eben nichts aus und nimmt auch nicht den Request an! Wie soll ich es denn im Browser sehen? Wenn nix passiert :D
 
Die Variable ist wohl im falschen Scope definiert und deshalb am Ende gar nicht sichtbar... (Block mit {...} )
solche Scopes sollte man meiner Meinung nach eh nicht machen, außer die Ausführung des Blocks ist an andere Dinge gebunden... (Schleifen, If-Statements, ...)

Und wenn man schon einen neuen Scope aufmacht, dann rückt man wenigstens ein... dann sieht wenigstens jeder hier auf den ersten Blick, dass es einen neuen Scope gibt... die Lesbarkeit des Codes profitiert enorm von konsequenter Formatierung.
 
Zuletzt bearbeitet:
Fehlerkonsole sagt

- ctlStart is not defined
- showStatus is not defined
- ctlReq is not defined

Wie meinst du das mit (Block mit {...} )
 
Also ich hab mal dein js Auszug in chrome gepastet und das funktioniert, auch wenn wirklich einiges "anders" besser ist:

- Die geschweiften Klammern dort machen keinen Sinn.
- Strukturen sollte man, auch wenn js das unterstützt, stets mit Semikolons trennen.

Ich tippe darauf, dass du auf deiner Seite weiteren Code hast, der irgendwie versucht aus dem dom dieses ctlStart etc. abzuarbeiten und es einfach nicht definiert ist. Der Auszug oben funktioniert jedenfalls, auch wenn er nicht hübsch ist.
 
Vereinfacht gesagt definiert ein {...}-Block einen Scope
also wenn du einen Block mit { beginnst und mit } beendest.

Genau das machst du da. Darin definierst du eine Variable. Die willst du aber außerhalb des Scopes nutzen => geht nicht.
Das führt nicht mal unbedingt zu einem Fehler in der Konsole, weil Variablen in JavaScript eh nicht initialisiert werden müssen... dann ist sie halt leer...



Edit: Wow, funktioniert tatsächlich trotz des Scopes...

Darf man den TE frage, wie er überhaupt zu dem Schluss kommt, dass es mit genau diesem Code Probleme gibt?
 
Zuletzt bearbeitet:
1668mib!

Das Scirpt funktioniert so, das wenn man auf "Request Control" klickt, man in die Warteschlange aufgenommen wird, falls ein Nutzer gerade das Kamera System nutzt! Bei dem anderen Nutzer der gerade die Kamera steuert, fängt ein Counter an z.B. 60 Sekunden, danach wirft es ihn aus der Kontrolle der Kamera raus und der andere, der die Kontrolle "requested" hat, dann darf die Kamera steuern!

Das Problem ist derzeit, das ich keine Ausgabe bekomm ob ich Requested habe, ob jemand anders in der Warteschleife ist und eine Zeit zählt es auch nicht runter!

Ich hab jetzt mal das fehlende Javascript eingetragen wo die Fehlerkonsole:

- ctlStart is not defined
- showStatus is not defined
- ctlReq is not defined

rum gemeckert hatte. Jetzt sagt er mir "form is null" ^^
 
Zuletzt bearbeitet:
Ein ganz andere Frage:
Wieso schreibst du den kompletten HTML Code via JavaScript in den DOM? Das macht das Script nicht gerade schnell.
 
Morpheus3k! Dann sag mir eine andere Lösung wie ich es machen kann ^^
 
Du schleißt die form ja zu früh...

queuePanel2 += '<form name="ctlstatusform"></form>'

und dein <p> passt auch nicht wirklich, weil auf gleicher Ebene <tr>s kommen, die aber in einer <table> sein müssen...

Ich wieß dass ich jetzt wieder wie ne Mecker-Tante klinge, aber dass Leute nicht mal HTML im Griff haben und dann mit JavaScript auch noch HTML-Code zusammenbauen...
 
Zuletzt bearbeitet:
1668mib! Ja das alles sehr alter Code der auch schon teilweise vorgegeben war! Deswegen habe ich erstmal darauf aufgebaut um zu schauen ob ich überhaupt all das hin bekomme, und es liegt eben nur noch am Queue Formular! Also er merkt schon mal, das jemand die Camera benutzt, das ist schon mal gut :D ^^ Bloss hab ich noch keine Ausgabe via Zahlen und Text dirext in den vorgesehenen Felder dafür!
 
Aber wir sollen an dem Codeschnipsel sagen können, warum sie nicht in deine komplexere Software passt? Hälst du die Leute hier für Götter oder Hellseher?

Hast du das unnötige </form> mal entfernt?
 
Ja ich weis doch Meister, das ist immer Schwer sowas zu erklären!

Ja habe ich, bekomm auch keinen Fehler mehr! Aber wie gesagt, es fehlt noch die Ausgabe der Sekunden sowie der Nummer in der Warteschleife und noch nen anderen Text! Ansonsten merkt der schon das was los geht, weil ich seh es ja im Admin Menü!

Das ist halt eine ältere Kamera Steuerungs Software. Die liefern auch schon ein FrontEnd mit, jedoch kann man daran nicht rum schrauben! Aber da funktioniert eben alles :D

Deswegen kann man seine eigenen Frontend Seiten rein basteln! Aber da muss man eben alles selber integrieren. Und das schlimme ist, das in dem Forum des Kameras Herstellers auch jeder fragt nach dem Queue System, weil kein Schwein da mal hilft. Nicht mal der Hersteller ^^
 
Also ich hab jetzt mal etwas rumgebastelt. Ich kann natürlich ohne dem Backend nicht wirklich was Handfestes bauen. Aber du kannst mal auf folgenden Code aufbauen:

HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>Camera Control</title>
		<style>
		.output { font-weight: bold; }
		</style>
	</head>
	
	<body>
		<h1>Test</h1>
		<p>Status in queue: <span id="status" class="output"><span></p>
		<p>Position in queue: <span id="pos" class="output"><span></p>
		<p>Time remaining: <span id="timeleft" class="output"><span></p>
		<button onclick="ctlReq();" name="request">Request control</button>

		<script language="javascript">
			function ctlReq() {
				if (!window.XMLHttpRequest) return;
				
				var status = document.getElementById("status");
				var pos = document.getElementById("pos");
				var timeleft = document.getElementById("timeleft");
			
				status.innerHTML = "Loading";
				pos.innerHTML = "Loading";
				timeleft.innerHTML = "Loading";	
				
				
				var url = "http://192.168.0.192/axis-cgi/com/ptzqueue.cgi?control=request&camera=1";
				var req = new XMLHttpRequest();
				req.open("GET", url);
				req.send(null);
				
				req.onreadystatechange = function() {
				
					if (req.readyState == 4 && req.status == 200) {
					
						var response = req.responseText;
						var queueStatus = JSON.parse(response);
						
						// Inhalt in HTML schreiben
						status.innerHTML = queueStatus[0];
						pos.innerHTML = queueStatus[1];
						timeleft.innerHTML = queueStatus[2];
					}
				}
			}
		</script>
	</body>
</html>
 
Danke schon mal!
 
Zurück
Oben