Newbie :-) hat Probleme mit Javascript
SmileyTom
- javascript
0 LX
Hi,
ich habe mich mit SelfHTML und Google bisher gut durchgemogelt. Aber nun komme ich einfach nicht weiter :-( Folgendes Problem:
Ich habe eine Website auf der mehrere HTML <divs> asynchron aktualisiert werden sollen. Dazu habe ich nun folgendes Script zusammen geschustert. Es funktioniert soweit auch schon für ein div. wenn ich nun aber ein weiteres hinzufüge, wird immer nur das letzte aktualisiert. Ich vermute mal, ich müsste das ganze noch irgendwie in ein übergeordnetes Objekt packen, damit jedesmal ein neues Kind erstellt wird. Aber wie?
Ihr habt bestimmt eine Idee :-)
Hier also der Code:
<script type="text/javascript" language="javascript">
var http_request = false;
function macheRequest(url, elementid) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// zu dieser Zeile siehe weiter unten
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
http_request.open('GET', url, true);
http_request.urlaktuell = url;
http_request.elementid = elementid;
http_request.onreadystatechange = alertInhalt;
http_request.send(null);
}
function alertInhalt() {
if (http_request.readyState == 4) {
var answer = http_request.responseText;
var urlnowaktuell = http_request.urlaktuell;
var elementidaktuell = http_request.elementid;
document.getElementById(elementidaktuell).innerHTML = answer;
setTimeout("macheRequest('" + urlnowaktuell + "', '" + elementidaktuell + "')",2000);
}
}
</script>
soweit so gut... Das ganze Rufe ich dann wie folgt auf:
<script type="text/javascript">
macheRequest('objects/sonnenschutz.php', 'sonnenschutz');
//macheRequest('objects/lichtkino.php', 'lichtkino');
</script>
den ersten Request (Sonnenschutz) macht er auch. Aber sobald ich das zweite (LichtKino) einfüge wird nur noch die lichtkino.php geholt und für den Sonnenschutz interessiert 'er' sich nicht mehr :-(
Ich übergebe der Funktion 'macheRequest' immer die URL und die ID des divs welches er aktualisieren soll.
Gruß
Tommy
Hi, Tommy!
Dein Problem besteht darin, dass der httpRequest und die Funktion alertInhalt jedes Mal überschrieben wird, da sie im globalen Scope und nicht im lokalen Scope der Funktion erzeugt wird.
Wenn Du var verwendest und anonyme Funktionszuweisung, sollte es funktionieren. Wenn Du Dich weiter über das Problem informieren willst, werden Dir die Suchbegriffe "Scope" und "Closure" gute Dienste leisten.
Gruß, LX