EDIT: und wichtig!
Die macheRequest()-Funktion funktioniert so nur in Safari und Opera, FireFox meldet einen Syntaxfehler mit dem Ort der Geladenen Datei.
Daher bitte mehr auf die Idee der Sache achten, nicht zu sehr auf den Quelltext)
Edit ende...
Ok, ich erklärs mal anhand eines Beispiel mit HTML-Dateien
Wir haben die startseite, die, die wir im Browser direkt öffnen (Auf ein absolute Minimum reduziert)
HTML:
<html>
<head>
<title>blubb</title>
<script type="text/javascript" language="javascript">
var request_funcs = new Array();
request_funcs['handle_inhalt'] = handle_inhalt_func;
function macheRequest(url,funktion) {
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.onreadystatechange = function(){
if (http_request.readyState == 4) {
if (http_request.status == 200) {
dw("Funktion via Variable *Yeah*");
var func = request_funcs[funktion];
if(undefined != func){
func(http_request.responseText);
}else{
alert("Diese Funktion " + funktion + " gibt es wohl nicht");
}
} else {
alert('Bei dem Request ist ein Problem aufgetreten.');
}
}
}
http_request.open('GET', url, false);
http_request.send(null);
}
function handle_inhalt_func(inhalthtml){
document.getElementById('inhalt').innerHTML = inhalthtml;
}
</script>
<!-- Kopfdaten-->
<body>
<div id="navi">
<a href="javascript:macheRequest('home.html',handle_inhalt)">Home</a><br>
<a href="javascript:macheRequest('impr.html',handle_inhalt)">Impressum</a><br>
<a href="javascript:macheRequest('fotos.html',handle_inhalt)">Fotos</a><br>
</div>
<div id="inhalt">
<!-- Hier steht der Inhalt drin, für diese Demo braucht aber nichts drin stehen-->
</div>
</body>
</html>
So, und dann haben wir noch drei weitere Dateien, eine fürs "Home", eine fürs Impressum und eine mit Fotos.
Die sehen dann so aus: (Ich machs mal mit nur einer Datei, mit den anderen its genauso)
HTML:
<h1>HOME</h1>
<p>Herzlich willkommen auf meiner Seite. Schaut doch mal ins Impressum oder in die Fotos</p>
So, schritt für Schritt:
Beim Aufruf der Seite steht im DIV "Inhalt" nichts drin, aber die Links können wir sehen.
Klicken wir jetzt auf einen Link, wird die JS-Funktion "macheRequest" aufgerufen, und zwar mit zwei Parametern.
Erstens die URL zu der Datei, die wir nachladen möchten, und zweitens den Namen der Funktion, die das ganze verarbeiten soll.
Die "macheRequest" läd quasi im Hintergrund, den Inhalt der entsprechenden Datei in eine Variable, und zwar die "
http_request.responseText".
Um den Request verarbeiten zu können, haben wir ja den Namen der entsprechenden Funktion angegeben.(sie weiter unten für weitere Erklärungen hierzu)
Ist der Request erfolgreich, wird der Inhalt von http_request.responseText, also der Datei die wir geöffnet haben, an die nächste Funktion, und zwar
handle_inhalt_func weitergegeben. Und die macht nichts anderes, als dieen Inhalt in das Div-Element mit der ID "inhalt" zu schreiben.
Das wars
Danach sieht die Datei aus, als ob in der index.html der Inhalt von der home.html in dem Inhalts-Div stehen würde
(Hier zu weiteren Erklärungen)
Der Funktionsname, den wir mitgeben, ist eigentlich nur der Schlüssel eines assioativen Arrays. Dort drin steht der eigentliche Funktionsname als Objekt drin. der zweite Link in meinem vorherigen Post erklärt das ganze ein wenig ausführlicher. Aber dazu sollte man sich ein wenig mehr in die Substanz von JavaScript einlesen. SelfHTML kann ich hier leider nicht unbedingt empfehlen, was dieses thema angeht
Wichtig zu wissen ist:
Will man eine zweite abarbeitende Funktion, so muss man, neben der Funktion selbst, noch ein weitere Element dieses Arrays anlegen.
Als "Index" muss dann der Name stehen, mit welchen man diese Funktion ansprechen möchte, und als Wert der eigentliche Funktionsname, OHNE anführungsstriche. Die beiden Werte dürfen auch gleich sein, hier hab ich es nicht gemacht, damit man sie unterscheiden kann
So, hoffe, nun einige Fragen aus dem Weg geräumt zu haben
gruß
Lukas