• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Javascript Problem bei Funktion

siod

New member
Hallo,

ich möchte eine Url an eine Funktion in einer Funktion übergeben, was ich nicht hinbekomme:

Code:
function Lampe([COLOR="Red"]Url[/COLOR]) {
	var xmlhttp;
    if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	}
    else 
	{
	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
	xmlhttp.onreadystatechange = function () 
	{
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
		{
		//document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
		}
		}
		xmlhttp.open("GET", [COLOR="Red"]Url[/COLOR] , true);
        xmlhttp.send();
    }

Code:
<img id="LampTv" onclick="Lampe("[COLOR="Red"]http://192.168.1.66/index.html?schalte&1[/COLOR]")" src="ligthbulb_off.png">
<img id="LampSofa" onclick="Lampe("[COLOR="Red"]http://192.168.1.66/index.html?schalte&3[/COLOR]")" src="ligthbulb_off.png">

Ich möchte also mit der Funktion "Lampe" diverse Lampen schalten. Es soll immer der entsprechende HTTP Lin kübergeben werden. Irgendwie klappts net...
Kann mir hier jemand weiterhelfen?
 
Wenn die URL einfach nur geöffnet werden soll, würde es so reichen:

Code:
Function Lampe (url)
{
LOCATION.HREF = url;
}

Ansonsten musst du mal genauer sagen, was du da vor hast und wie das schalten der Lampen genau funktioniert.
 
Nun, ich habe mir eine Webseite gebastelt mit der ich in Zukunft Funksteckdosen die ich per Arduino Steuer schalten möchte. Da das ganz dynamisch auf der Website passieren soll nutze ich AJAX.
Nun ist es so, dass wenn ich bei
Code:
xmlhttp.open("GET", [COLOR="#FF0000"]Url[/COLOR] , true);
die URL direkt eingebe, und zwar so
Code:
xmlhttp.open("GET", [COLOR="#FF0000"]"http://192.168.1.66/index.html?schalte&1"[/COLOR], true);
funktioniert es. Da ich aber mit mehreren Funksteckosen arbeite, ändert sich jeweils die URL, somit möchte ich mit variablen arbeiten. Nur klappt die Übergabe aus mir unerklärlichen Gründen nicht...

Ich habe übrignes das gleiche Problem, wenn ich die Grafik der Lampen ändern möchte und auch hier mit Variablen arbeite:

Code:
function Tauschen(DeviceId)
{
  if (Flag == 'off'){
  document.getElementById(DeviceId).src = SwitchImg[1];
  Flag='on'
  }
  else
  {
  document.getElementById(DeviceId).src = SwitchImg[2];
  Flag='off'
  }
}
Code:
<img id="LampTv" onclick="Tauschen("LampTv")" src="ligthbulb_off.png">

Da passiert auch einfach nix. Ich muss noch dazu sagen, dass ich mich erst seit gestern mit Javascript beschäftige und cih demnach nich wirklich viel Ahnung davon habe...
 
Zuletzt bearbeitet:
Du solltest bei der Webentwicklung immer in der Fehlerkonsole nachsehen, ob irgendein Fehler auftritt!

Schon mal etwas von escapen gehört? Und zwar musst du Anführungszeichen innerhalb von Anführungszeichen des gleichen Typs immer mit einem Backslash escapen, sonst denkt der Browser logischerweise, dass an der Stelle das jeweilige Attribut zuende ist, was massive Syntax-Fehler verursacht. Mit diesem Tipp kannst du auch dein Problem schnell lösen...
 
Ja, genau das war es! Habe nun die " " in der Klammer durch ' ' ersetzt und jetzt geht es! Kleiner Fehler, grosse Wirkung! Danke sehr.
 
Habe nun die " " in der Klammer durch ' ' ersetzt und jetzt geht es! Kleiner Fehler, grosse Wirkung! Danke sehr.
Gern geschehen! Genau, entweder mit einfachen Anführungszeichen (was dann allerdings streng genommen kein Escapen ist) oder <img id="LampTv" onclick="Tauschen(\"LampTv\")" src="ligthbulb_off.png">

PS: vermeide unbedingt globale Variablen!
Übrigens ist es in JS unüblich, Variablen mit einem Großbuchstaben zu beginnen. Außerdem ist es sinnvoller, statt Strings wie on/off, yes/no usw. einen booleschen Wert zu verwenden - nämlich true und false.
Code:
if (!on){
  var on = true;
}
 
Zuletzt bearbeitet:
vermeide unbedingt globale Variablen!
Der Code oben kann auch gar nicht funktionieren, da ja die Flag für jede Lampe einzeln gesteuert werden müsste. Ich würde das ungefähr so machen:
Code:
function tauschen(el){
	if (!el.on){
		el.src = SwitchImg[1];
	}
	else {
		el.src = SwitchImg[2];
	}
	el.on = !el.on;
}
HTML:
<img id="LampTv" onclick="tauschen(this)" src="ligthbulb_off.png">
- oder man arbeitet direkt auf dem .src-Attribut und schaut nach, ob da ein "on" oder ein "off" am Ende ist.
 
Zurück
Oben