Neue Version.
MyHtml.html kann mit der neuen Version (Attachment) ausgetauscht werden.
Dafür muß der Notes Server nicht runtergefahren werden. Dafür aber aufpassen auf Browser-Cache:
Shift + Aktualisieren Button.
Vorsicht: Der untere Teil des Javascripts ist völlig auskommentiert.
Es ist nun wirklich Ajax.
Parameter dieser Methode ist true, also findet der Aufruf gegen den Server asynchron statt.
xmlhttp.open('GET', url, true);
Vor dem Send wird nun ein Callback-Handler für den Ajax-Objekt (also xmlhttp) ->EventHandler onreadyStateChange definiert (updatePage).
xmlhttp.onreadystatechange = updatePage;
xmlhttp.send(null);
updatechange ist eine von mir definierte Funktion:
function updatePage() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert("serverResponse=" + xmlhttp.responseText);
document.getElementById('result').innerHTML = xmlhttp.responseText;
}
}
}
Diese Funktion wird immer dann aufgerufen, wenn ein Event ReadyStateChange des Ajax-Objektes einläuft. Muß man sich ein bischen vorstellen wie QuerySave und ähnliches in Notes. Das wird ja auch immer dann aufgerufen, bevor das Dokument gespeichert wird.
Das ist Event-orientierte Programmierung. Gibts ja in Notes viel.
Der Browser ruft nun diese Methode bei State-Änderungen des Ajax-Objekts (xmlhttp) auf. Es sind 5 states definiert.
* 0: The request is uninitialized (before you've called open()).
* 1: The request is set up, but hasn't been sent (before you've called send()).
* 2: The request was sent and is being processed (you can usually get content headers from the response at this point).
* 3: The request is being processed; often some partial data is available from the response, but the server hasn't finished with its response.
* 4: The response is complete; you can get the server's response and use it.
Nur der Status 4 (alles fertig) interessiert uns. Deshalb das erste if in der Funktion
updatePage() {
if (xmlhttp.readyState == 4) {
Das 2. if prüft dann, der Server auf den Request des Ajax Objekt mit ok. (http-state 200) geantwortet hat.
if (xmlhttp.status == 200) {
Dann wird die Antwort wieder in die Web-Dom Repräsentation der im Browser dargestellten Webseite reingeschrieben... und vorher in eine alert-box ausgegeben (hatten wir in Beispiel 1 schon):
alert("serverResponse=" + xmlhttp.responseText);
document.getElementById('result').innerHTML = xmlhttp.responseText;
EINFACH AUSPROBIEREN. DANN KÖNNTE ES KLAR WERDEN, WORUM ES HIER GEHT.
WIRKLICH GUTER ARTIKEL:
http://www-128.ibm.com/developerworks/web/library/wa-ajaxintro2/?ca=dgr-lnxw07AJAX-RequestHier wird eine Menge erklärt (auch von dem hier von mir publizierten Code).
Der Autor hat auch ein Buch in Kathy Sierras / Bert Bates "head first" Serie zu Ajax publiziert. Dies hab ich mir direkt über Caiman America (mein neuer Lieblings Amazon Discounter) für 22.90 Euro gekauft.
ÜBRIGENS:
Es sollte sich ja inzwischen rumgesprochen haben, dass JavaScript und Java 2 völlig unterschiedliche Sachen sind. Bei Ajax nutzt man schon bei den einfachen Beispielen oben Konstrukte, die xTreme un-java sind.
Z.B. einen event-Handler einfach mit der Zeile:
xmlhttp.onreadystatechange = updatePage;
JavaScript ist von seinem Wesen her näher an common-lisp denn an Java ist. Was das bedeutet weiss ich auch nicht so richtig. Ich hab das nur gelesen und nicht richtig verstanden, weil ich kein common-lisp kann. Auf jeden Fall kann ich sagen, dass es in JavaScript Konstrukte gibt, die es in Java so nicht gibt.
Gruß Axel