kommunikation mit dem server nebenbei - ajax, mootools, dojo
frankx
- javascript
Hellihello
wenn ich dem Server mal nebenbei was sagen will, und dabei auf eine response vielleicht sogar verzichten mag, ist der xmlHttpRequest das Objekt der Begierde? Asynchron sagt mir, dass die Kommunikation bzw. Seitenverarbeitung nichts synchron mit dem aktuell übergebenen request zu tun hat.
Theoretisch also möglich, onclick dem server mitzuteilen, das mit action=updat bei id=123 der wert name auf "hans" gesetzt werden soll. Die aktuelle Seite bleibt dabei unberührt, die Antwort vom server könnte dann "true" oder "false" sein, für "hat geklappt" oder "hat nicht geklappt".
Das selbst zusammenzustückeln ist ja doch oft aufwändig nicht nur wg. der Browserinkompatibilitäten. Nehm ich "dojo"? Das kam mir grad beim Zend-FW unter. Oder "mootools", das wurde mir letzlich von meinem "SciTE-editor-empfehler" empfohlen.
Dank und Gruß,
[latex]Mae govannen![/latex]
Das selbst zusammenzustückeln ist ja doch oft aufwändig nicht nur wg. der Browserinkompatibilitäten. Nehm ich "dojo"? Das kam mir grad beim Zend-FW unter. Oder "mootools", das wurde mir letzlich von meinem "SciTE-editor-empfehler" empfohlen.
Ich mag diese ganzen all-incl-frameworks nicht. einmal, weil sie zum größten Teil sehr unsauber geschrieben sind (Browsersniffing, Erweiterung/Überschreiben von Objektemethoden etc) und auch die Größen, die tw. selbst optimiert bei > 60k liegen.
Natürlich gibt es nicht "das ideale Framewpok", aber halbwegs brauchbar scheint[1] das hier zu sein:
Fork
[1] kenne es selber erst seit vorgestern und habe mich noch nicht näher damit befasst, der Autor ist mir aber aus comp.lang.javascript bekannt und scheint -zumindest aus dem Text der Fork Seite geschlossen- zumindest mehr Ahnung von sauberer Programmierung zu haben als viele andere Framework-Schreiber.
Cü,
dem server mitzuteilen, das mit action=updat bei id=123 der wert name auf "hans" gesetzt werden soll. Die aktuelle Seite bleibt dabei unberührt, die Antwort vom server könnte dann "true" oder "false" sein, für "hat geklappt" oder "hat nicht geklappt".
Du willst einen simplen XMLHttpRequest absenden? Dafür nimmst du zehn Zeilen Code, packst den in eine wiederverwendbare Funktion:
function sendRequest (uri, postData, callback)
Dafür ist wahrlich kein Framework nötig.
Das selbst zusammenzustückeln ist ja doch oft aufwändig nicht nur wg. der Browserinkompatibilitäten.
Nein, das ist überhaupt nicht aufwändig.
Mathias
Hellihello Mathias,
merci. Muss man im Localhost nur aufpassen, dass man beide Dateien (requestUri und HtmlJs-Dokument über "localhost" aufruft).
Das Ergebnis kann man dann evaln, oder? Eval soll ja böse sein, hab ich mal gelesen. Aber anders geht es ja nicht, oder?
Das Einbinden eines weiteren script-Elementes mit entsprechendem src-Attribut wäre ja nicht mehr Ajax. Da müsste man dann nach dem Request eine Funktion aufrufen, die im Script deklariert wird, bzw. eine while-schleife, die immer schaut, ob eine Funktion sonstewas existiert, oder?
Dank und Gruß,
Muss man im Localhost nur aufpassen, dass man beide Dateien (requestUri und HtmlJs-Dokument über "localhost" aufruft).
Ja, das muss man unabhängig vom Host.
Das Ergebnis kann man dann evaln, oder?
Kann man, wenn es sich um JavaScript-Code wie Objekt-Literale handelt, wenn man komplexere Daten zurückgeben und dem JavaScript zur Verfügung stellen will.
Das Einbinden eines weiteren script-Elementes mit entsprechendem src-Attribut wäre ja nicht mehr Ajax.
Dafür kann man auch XMLHttpRequest verwenden.
Da müsste man dann nach dem Request eine Funktion aufrufen, die im Script deklariert wird, bzw. eine while-schleife, die immer schaut, ob eine Funktion sonstewas existiert, oder?
Das wäre von hinten durch die Brust ins Auge, deswegen lädt man Scripte entweder mit XMLHttpRequest nach oder sie rufen den "Ich-bin-fertig"-Handler selbst auf (das nennt sich dann JSONP).
Mathias
Hellihello
Kann man, wenn es sich um JavaScript-Code wie Objekt-Literale handelt, wenn man komplexere Daten zurückgeben und dem JavaScript zur Verfügung stellen will.
Oder man nimmt eben einen XML-Dom-Baum entgegen?
Das Einbinden eines weiteren script-Elementes mit entsprechendem src-Attribut wäre ja nicht mehr Ajax.
Dafür kann man auch XMLHttpRequest verwenden.
Aha. Ich dachte, das seien alternative methoden:
myButton.onclick = function() {
myBody->appendChild(myCreatedScriptElement);
myCreatedScriptElement.src="example.com/giveMeAFunction.php?timestampToForceRequest");
}
Das wäre von hinten durch die Brust ins Auge, deswegen lädt man Scripte entweder mit XMLHttpRequest nach
... und nicht wie oben beschrieben...
oder sie rufen den "Ich-bin-fertig"-Handler selbst auf (das nennt sich dann JSONP).
Ist das nicht ".readyStateChange==4" ?
Dank und Gruß,
Oder man nimmt eben einen XML-Dom-Baum entgegen?
Das hat in den meisten Fällen gegenüber JSON nur Nachteile.
myBody->appendChild(myCreatedScriptElement);
myCreatedScriptElement.src="example.com/giveMeAFunction.php?timestampToForceRequest");
Natürlich kannst du das machen, aber wenn du auf die Weise JavaScript nachlädst, weißt du nicht, wann es angekommen und ausgeführt ist.
oder sie rufen den "Ich-bin-fertig"-Handler selbst auf (das nennt sich dann JSONP).
Ist das nicht ".readyStateChange==4" ?
Bei XMLHttpRequest, ja.
Bei JSONP bindet man ein Script über <script> ein und übergibt im Query-String einen Funktionsnamen. Serverseitig wird der Funktionsname in das Script geschrieben und aufgerufen - üblicherweise mit den angeforderten Daten. Auf dieselbe Weise kann man aber natürlich auch Scripte nachladen und das nachgeladene Script "sagt Bescheid", wenn es fertig geladen ist.
Mathias