Zum Inhalt springen

„Ajax (Programmierung)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K wikilinks
 
Zeile 1: Zeile 1:
[[Datei:Ajax-vergleich.svg|mini|hochkant=1.8|Das Modell einer traditionellen Webanwendung (links) im direkten Vergleich mit einer Ajax-Webanwendung (rechts). Sämtliche Anwendungsdaten werden auf dem Server in einer [[Datenbank]] und/oder einem [[Altsystem|Legacy-System]] abgespeichert.]]
'''Ajax''' [{{IPA|ˈeɪdʒæks}}] ist ein [[Akronym#Initialwörter|Akronym]] für die Wortfolge '''A'''synchronous '''J'''avascript '''a'''nd '''X'''ML. Es bezeichnet ein Konzept der [[Datenübertragung]] zwischen einem [[Server]] und dem [[Browser]], welches es ermöglicht, dass die [[HTML]]-Seite nicht mit jeder [[HTTP]]-[[Netzwerkprotokoll|Protokoll]]-Anfrage komplett neu geladen werden muss. Das eigentliche Novum besteht in der Tatsache, dass nur gewisse Teile einer HTML-Seite sukzessive bei Bedarf nachgeladen werden.


'''Ajax''' [{{IPA|ˈeidʒæks}}] (auch '''AJAX'''; [[Akronym]] von [[Englische Sprache|englisch]] ''{{lang|en|<u>A</u>synchronous <u>J</u>avaScript <u>a</u>nd <u>X</u>ML}}'') bezeichnet ein Konzept der [[Synchronität|asynchronen]] [[Datenübertragung]] zwischen einem [[Webbrowser|Browser]] und dem [[Server]]. Dieses ermöglicht es, [[Hypertext Transfer Protocol|HTTP]]-Anfragen durchzuführen, während eine [[HTML-Seite]] angezeigt wird, und die Seite zu verändern, ohne sie komplett neu zu laden.
Wer den Begriff Ajax in diesem technologischen Kontext ''erfunden'' hat, ist nicht mehr eindeutig nachvollziehbar. Sicher ist jedoch, dass ihn [[Jesse James Garrett]], ein Mitarbeiter der Agentur [[Adaptive Path]], in seinem Aufsatz ''Ajax: A New Approach to Web Applications'' maßgeblich geprägt hat. Grundsätzlich waren die technologischen Grundlagen und die Vorgehensweise aber bereits vorher bekannt, und wurde generell mit dem Begriff [[XMLHttpRequest]] beschrieben. <!-- @@issue-0815 -->Wenn man so will, hat Garret also den [[Markenmanagement|Brand]] Ajax erschaffen, um so diverse [[Software]]-Technologien unter einem Begriff zu subsumieren.


== Der Aufbau einer Ajax-Anwendung ==
Bei Ajax werden verschiedene bekannte Technologien eingesetzt, um [[Interaktivität|interaktive]], [[Desktop (EDV)|Desktop]]-ähnliche [[World Wide Web|Web]]-Anwendungen realisieren zu können. <!-- @@issue-0816 -->Diese vermitteln so den Eindruck, als ob das Problem der [[Hypertext Transfer Protocol#Funktionsweise|zustandlosen]] Web-Anwendung behoben wurde.


Eine Ajax-Anwendung basiert auf folgenden Web-Techniken:
Eine Ajax-Anwendung basiert auf folgenden Web-Techniken:


* [[Hypertext Markup Language|HTML]] (oder [[Extensible Hypertext Markup Language|XHTML]])
[[Bild:ajax-vergleich.png|450px|right|thumb|Das Model einer traditionellen Web-Anwendung (links) im direkten Vergleich mit einer Ajax Web-Anwendung (rechts). Sämtliche Anwendungsdaten werden auf dem Server in einer [[Datenbank]] und/oder einem [[Legacy-System]] abgespeichert.]]
* ''[[Document Object Model]]'' (DOM) zur Repräsentation der Daten oder Inhalte
* ''[[JavaScript]]'' zur Manipulation des ''Document Object Models'' und zur dynamischen Darstellung der Inhalte. JavaScript dient auch als Schnittstelle zwischen einzelnen Komponenten.
* Das ''[[XMLHttpRequest]]''-Objekt, Bestandteil vieler Browser, um Daten auf asynchroner Basis mit dem Webserver austauschen zu können
* Eine andere Transportmethode ist ''[[On-Demand JavaScript]]'',<ref name="AP">{{cite web |url=http://ajaxpatterns.org/On-Demand_Javascript |title=Ajax Patterns – On-Demand Javascript |publisher=Ajaxpatterns.org |date= |accessdate=2010-09-11 |offline=yes |archiveurl=https://web.archive.org/web/20110422104546/http://ajaxpatterns.org/On-Demand_Javascript |archivedate=2011-04-22|language=en}}</ref> bei der eine JavaScript-Datei per DOM-Manipulation angefordert wird.


Für den Aufruf von Ressourcen, Funktionen bzw. Methoden ([[Programmierschnittstelle|API]]) gibt es die Ansätze:
* [[HTML]] (oder [[XHTML]]) und [[CSS]] um das Aussehen einer Web-Seite beeinflussen zu können,
* [[DOM|Document Object Model]] zur Repräsentation von Daten bzw. Inhalten,
* [[JavaScript]] zur Manipulation des Document Object Models und zur dynamischen Darstellung der Inhalte,
* [[XML]] als Datenaustauschformat,
* [[XSLT]] zur Datentransformation,
* Das [[XMLHttpRequest]]-Objekt, um Daten auf [[Asynchronität|asynchroner]] Basis mit dem Web-Server austauschen zu können. (In diesem Kontext wird vornehmlich XML als Trägermedium der einzelnen Daten benutzt. Es ist jedoch auch denkbar, formatiertes HTML, einen [[ASCII]]-Text, [[JSON]] oder gar [[EBML]] zu verwenden).


* [[Representational State Transfer|REST]] – Aufruf mittels klassischer [[Hypertext Transfer Protocol|HTTP]]-Techniken, zum Beispiel <code><nowiki>GET http://localhost/person/4</nowiki></code>
Die Programmierung wird in JavaScript realisiert.
* [[SOAP]] – Übertragung von Methodenname und Parametern als XML-Dokument

Bei der asynchronen Übertragung der Daten haben sich verschiedene Verfahren etabliert:

* [[Representational State Transfer|REST]]-ähnliche Verfahren, um Nutzdaten in Textform zu übertragen
* [[JavaScript Object Notation|JSON]], ein auf ''JavaScript'' zugeschnittenes, textbasiertes Format für Daten und Objekte
* Diverse [[proprietär]]e [[Extensible Markup Language|XML]]-Formate
* [[SOAP]], ein Protokoll für ''[[Webservice]]s'', das meist XML als [[Austauschformat]] verwendet

Im Zusammenhang mit Ajax-Anwendungen werden auch andere Webtechnologien eingesetzt, die ursächlich aber keinen Zusammenhang mit Ajax haben:

* [[Cascading Style Sheets|CSS]] zur Formatierung einer Webseite
* [[XSL Transformation|XSLT]] zur Datentransformation


== Geschichte ==
== Geschichte ==
=== Ursprünge ===
Die Idee und die damit verbundenen Technologien, welche dem Ajax-Konzept zugrunde liegt, gibt es in vergleichbarer Form schon seit etwa [[1998]]. Die erste Komponente, die es ermöglichte, client-seitig eine HTTP-Anforderung auszulösen, wurde durch das [[Microsoft Outlook|Outlook]] Web Access Team erstellt. Diese Komponente ist Teil des [[Microsoft Exchange]] Servers und wurde auch bald als Bestandteil des [[Internet Explorer]] 4.0 ausgeliefert [http://support.microsoft.com/default.aspx?scid=kb;en-us;269238#XSLTH3131121122120121120120]. Manche Beobachter stufen Outlook Web Access als ersten erfolgreichen Vertreter des Ajax-Konzepts ein. Später folgten Anwendungen wie [[Oddpost]]s [[Webmail]]-Produkt. Im Jahr [[2005]] war der Begriff Ajax zunehmend durch einige wegweisende Ereignisse in den Medien präsent. Zum einen benutzte Google das asynchrone Kommunikations-Paradigma in einigen bekannten interaktiven Anwendungen wie beispielsweise [[Google Groups]], [[Google Maps]], [[Google Suggest]] und nicht zuletzt [[Gmail]]. <!-- @@issue-0817 -->Garret hat den Begriff ''Ajax'' als solchen, wie bereits erwähnt, geprägt. Der von Ihm verfasste Artikel hat im Ajax-Umfeld inzwischen einen gewissen Bekanntheitsgrad erlangt. Letztlich hat sich die Ajax-Unterstützung der [[Gecko (Rendering Engine)|Gecko-Engine]] in einem Maß entwickelt, welche es ermöglicht, die Ajax-Technologie in vielfältiger Weise einzusetzen.


Von wem die Begriffsschöpfung ''Ajax'' ursprünglich stammt, ist nicht mehr eindeutig nachvollziehbar. Sicher ist jedoch, dass den Begriff Jesse James Garrett (Mitarbeiter der Agentur Adaptive Path) in seinem Aufsatz ''Ajax: A New Approach to Web Applications''<ref>Jesse James Garret: {{Webarchiv |url=http://www.adaptivepath.com/ideas/essays/archives/000385.php |wayback=20080702075113 |text=Ajax: A New Approach to Web Applications}}</ref> vom 18. Februar 2005 maßgeblich geprägt hat. Grundsätzlich waren die technologischen Grundlagen und die Vorgehensweise aber bereits bekannt und wurden generell mit dem Begriff ''[[XMLHttpRequest]]'' beschrieben. Wenn man so will, hat Garrett also die Marke Ajax erschaffen, um so diverse [[Software]]-Technologien unter einem Begriff zusammenzufassen.
== Vergleich mit herkömmlichen Web-Anwendungen ==


Die Idee und die damit verbundenen Technologien, die dem Ajax-Konzept zugrunde liegen, gibt es in vergleichbarer Form schon seit etwa 1998. Die erste Komponente, die es ermöglichte, clientseitig eine HTTP-Anforderung auszulösen, basierte auf einer von [[Microsoft]] entwickelten Remote-Scripting-Komponente.<ref name="RS">{{cite web|url=http://msdn.microsoft.com/de-de/library/cc766801.aspx |title=Remote Scripting |publisher=Msdn.microsoft.com |date= |accessdate=2010-09-11|language=en}}</ref> Anfänglich als [[Java-Applet]] umgesetzt, wurde sie später durch ein Inline-Frame-Element ersetzt. Später wurde diese Idee durch das [[Outlook on the web|Outlook-Web-Access]]-Team verfeinert. Diese Komponente ist Teil des [[Microsoft Exchange Server]]s und wurde auch bald, in Form einer XML-Unterstützung, als Bestandteil des ''[[Internet Explorer]]s'' 4.0 ausgeliefert.<ref name="MSS">Microsoft: [http://support.microsoft.com/default.aspx#XSLTH3131121122120121120120 XML versions that are included with Microsoft Internet Explorer] Knowledge Base Q269238 – Version list for the Microsoft XML parser</ref> Manche Beobachter stufen ''Outlook Web Access'' als ersten erfolgreichen Vertreter des Ajax-Konzepts ein. Dennoch basierten diese sehr frühen Umsetzungen des Konzeptes teilweise noch nicht auf dem ''XMLHttpRequest''-Objekt.
[[Bild:Ajax-prozessfluss-traditionell.png|450px|right|thumb|Der Prozessfluss einer traditionellen Web-Anwendung.]]


=== Erste Ajax-Anwendungen ===
Ajax-Anwendungen erwecken den Eindruck, dass sie gänzlich auf dem [[Computer]] des Anwenders ausgeführt werden. Der Prozessfluss einer traditionellen Web-Anwendung wird hingegen durch die zustandslose Natur des HTTP-Protokolls bestimmt. Das damit unmittelbar verbundene [[Request|Request-Response]]-[[Paradigma]] führt dazu, dass bei jeder Benutzeraktion eine zugehörige Anfrage (engl. Request) an den Server gerichtet wird. Verzögert sich die erforderliche Antwort (engl. Response) des Servers, oder bleibt diese gar aus, so entstehen unweigerlich längeren Wartezeiten oder im schlechtesten Fall ''Brüche'' im Ablauf der Anwendung. Das geschilderte Szenario macht es auch für den Benutzer erkenntlich, dass eine traditionelle Web-Anwendung auf mehrere [[Multi-Tier-Architektur|Bereiche]] verteilt wurde. Ein Umstand, der mit der Ajax Programmier-Technik transparenter, und somit auch fehlertoleranter gestaltet werden soll.
Später folgten Anwendungen wie [[Oddpost]]s [[Webmail]]-Dienst (heute [[Yahoo Mail]]). Im Jahr 2005 war der Begriff Ajax zunehmend durch einige wegweisende Ereignisse in den Medien präsent. Zum einen benutzte Google das asynchrone Kommunikations-Paradigma in einigen bekannten interaktiven Anwendungen wie beispielsweise [[Google Groups]], [[Google Maps]], [[Google Suggest]], [[Gmail]] und [[Google Finance]]. Der von Garrett verfasste Artikel hat im Ajax-Umfeld inzwischen einen gewissen Bekanntheitsgrad erlangt. Letztlich hat sich die Ajax-Unterstützung der [[Gecko (Software)|Gecko-Engine]] in einem Maß entwickelt, welche es ermöglicht, die Ajax-Technologie in vielfältiger Weise einzusetzen.


=== Standardisierung der Ajax-Technologien ===
''„Jede Benutzeraktion, die für gewöhnlich eine HTTP-Anfrage erzeugen würde, erzeugt nun einen JavaScript-Aufruf, der an die Ajax-Engine delegiert wird [...]“'', so beschreibt es Garrett in seinem Essay. ''„Jede Antwort auf eine Aktion des Nutzers, die keine Verbindung zum Server erfordert, – wie beispielsweise das Validieren von Daten, das Verändern von Daten, welche sich im Speicher befinden und sogar das Navigieren zwischen einzelnen Elementen der Web-Seite – all dies kann von der Ajax-Engine bewältigt werden. Benötigt die Ajax-Engine Daten vom Server, um eine bestimmte Aktion erfolgreich durchführen zu können – es kann sich hierbei beispielsweise um das Übertragen von Daten, die verarbeitet werden müssen, um das Nachladen einzelner Bausteine der Benutzeroberfläche oder um das Laden neuer Daten handeln –, führt diese eine asynchrone Anfrage, für gewöhnlich in Form eines XML-Dokuments, an den Server durch. Dabei wurde jedoch die Interaktion des Benutzers mit der Anwendung, wie dies bei gewöhnliche Web-Anwendungen der Fall ist, nicht unterbrochen [...]“''.
Neueste Standardisierungsunterfangen des XMLHttpRequest-Objekts seitens des [[World Wide Web Consortium|W3Cs]] und die Gründung der [[OpenAjax Alliance]]<ref name="OAI">{{cite web |author=Zimbra.com |url=http://www.zimbra.com/community/open_ajax.html |title=Stellungnahme des Unternehmens Zimbra, Inc. bezüglich der Open Ajax Initiative |publisher=Zimbra.com |date= |accessdate=2010-09-11 |archiveurl=https://web.archive.org/web/20090803135838/http://www.zimbra.com/community/open_ajax.html |archivedate=2009-08-03 |offline=0 |language=en }}</ref> lassen erkennen, dass die Industrie zukünftig die Ajax-Technologie in ihre Produkte integrieren und somit auf breiter Basis unterstützen wird.


Im Bereich der Standardisierung des Protokolls zwischen Webbrowser und Webserver kann der Kommunikationsstandard [[SOAP]] für Ajax-Anwendungen genutzt werden,<ref name="AE">{{cite web|url=http://www.mathertel.de/AJAXEngine/ |title=Browserunabhängige Ajax-Engine auf der Basis der Web-Services-Technologie |publisher=Mathertel.de |date=2007-02-24 |accessdate=2010-09-11}}</ref> um so auf einem Server bereits vorhandene Anwendungen, die auf [[Webservice]]s basieren, wiederzuverwenden.
<!-- @@issue-0819 -->Traditionell übermitteln Web-Anwendungen im Grunde Formulare, die zuvor vom Benutzer ausgefüllt wurden, an einen [[Webserver]]. Der Webserver antwortet, indem er dem Browser des Nutzers eine, entsprechend der zuvor übermittelten Formulardaten neu generierte, [[Webseite]] schickt. Aufgrund der Tatsache, dass der Webserver bei jeder Anfrage seitens des Nutzers eine neue Webseite erzeugen und übermitteln muss, erscheint die Anwendung dem Benutzer insgesamt als träge und wenig intuitiv, vergleicht man diese mit einer gewöhnlichen Desktop-Anwendung.


== Vergleich mit herkömmlichen Webanwendungen ==
Ajax-Anwendungen hingegen sind in der Lage, Anfragen an den Server zu schicken, bei denen nur die Daten angefordert werden, die tatsächlich benötigt werden. Für gewöhnlich geschieht dies über den Aufruf eines [[SOAP]] [[Web Service]]s oder eines vergleichbaren XML-basierten Web-Service-Dialekts. Der Client, also der Webbrowser, verarbeitet die Antwort des Servers nicht direkt, sondern schleust diese durch den JavaScript-Prozess der Ajax-Engine. Im Ergebnis erhält man so eine Benutzeroberfläche, die sehr viel zügiger auf Benutzereingaben reagiert. Ein Grund für dieses veränderte Verhalten ist die Tatsache, dass wesentlich weniger Daten zwischen Webbrowser und Webserver ausgetauscht werden müssen. Zudem wird die Webserverlast reduziert, da schon viele Verarbeitungsschritte Client-seitigt getätigt werden können.
[[Datei:Prozessfluss-traditionell.svg|mini|hochkant=2|Der Prozessfluss einer traditionellen Webanwendung]]


Ajax-Anwendungen erwecken den Eindruck, dass sie gänzlich auf dem [[Computer]] des Anwenders ausgeführt werden. Der Prozessfluss einer traditionellen Webanwendung wird hingegen durch die zustandslose Natur einer HTTP-Anfrage bestimmt. Das damit unmittelbar verbundene [[Client-Server-Modell|Request]]-Response-[[Paradigma]] führt dazu, dass bei jeder Benutzeraktion eine zugehörige Anfrage (englisch ''Request'') an den Server gerichtet wird. Verzögert sich die erforderliche Antwort (englisch ''Response'') des Servers oder bleibt diese gar aus, so entstehen unweigerlich längere Wartezeiten oder im schlechtesten Fall ''Brüche'' im Ablauf der Anwendung. Das geschilderte Szenario macht für den Benutzer einer traditionellen Webanwendung deutlich, dass sie auf mehrere [[Schichtenarchitektur|Bereiche]] verteilt wurde – ein Umstand, der mit der Ajax-Programmiertechnik [[Transparenz (Computersystem)|transparenter]] und somit auch fehlertoleranter gestaltet werden soll.
Man stelle sich beispielsweise eine Web-Anwendung zur Verwaltung von Fotografien vor. Möchte der Benutzer einem Foto eine Beschreibung oder einen Titel hinzufügen, so müsste bei einem traditionellen Programmieransatz die gesamte Seite einschließlich der Bilder neu generiert werden. Mit der Ajax-Technologie wird nur der Bereich der Webseite erneuert, der auch verändert wurde. Seiten-Inhalte werden in diesem Zusammenhang über [[DHTML|dynamisches HTML]] aktualisiert. Dieses Beispiel veranschaulicht, wie es innerhalb der [[Flickr]]-Anwendung möglich ist, Titel einzelner Bilder zu verändern.


Garrett beschreibt zur Abwicklung der Ajax-Anfragen eine „Ajax-Engine“, eine in JavaScript geschriebene Komponente, die die clientseitige Arbeit übernimmt:
[[Bild:Ajax-prozessfluss-ajax.png|450px|right|thumb|Der Prozessfluss einer Anwendung, wie er sich bei Ajax darstellt.]]

{{Zitat
|Text=Jede Benutzeraktion, die für gewöhnlich eine HTTP-Anfrage erzeugen würde, erzeugt nun einen JavaScript-Aufruf, der an die Ajax-Engine delegiert wird […] Jede Antwort auf eine Aktion des Nutzers, die keine Verbindung zum Server erfordert, – wie beispielsweise das Validieren von Daten, das Verändern von Daten, welche sich im Speicher befinden, und sogar das Navigieren zwischen einzelnen Elementen der Webseite – all dies kann von der Ajax-Engine bewältigt werden. Benötigt die Ajax-Engine Daten vom Server, um eine bestimmte Aktion erfolgreich durchführen zu können – es kann sich hierbei beispielsweise um das Übertragen von Daten, die verarbeitet werden müssen, um das Nachladen einzelner Bausteine der Benutzeroberfläche oder um das Laden neuer Daten handeln –, führt diese eine asynchrone Anfrage, für gewöhnlich in Form eines XML-Dokuments, an den Server durch. Dabei wurde jedoch die Interaktion des Benutzers mit der Anwendung, wie dies bei gewöhnlichen Webanwendungen der Fall ist, nicht unterbrochen […].
|Autor=Garrett}}

Traditionell übermitteln Webanwendungen [[Webformular|Formulare]], die zuvor vom Benutzer ausgefüllt wurden, an einen [[Webserver]]. Der Webserver antwortet, indem er dem Browser des Nutzers eine entsprechend den zuvor übermittelten Formulardaten neu generierte [[Webseite]] schickt. Weil der Webserver bei jeder Anfrage seitens des Nutzers eine neue Webseite erzeugen und übermitteln muss, erscheint die Anwendung dem Benutzer insgesamt als träge und wenig intuitiv, vergleicht man diese mit einer gewöhnlichen Desktop-Anwendung.

Ajax-Anwendungen hingegen sind in der Lage, Anfragen an den Server zu schicken, bei denen nur die Daten angefordert werden, die tatsächlich benötigt werden. Dies geschieht über den Aufruf eines Webservices in einer der oben beschriebenen Varianten ([[Representational State Transfer|REST]], [[SOAP]]). Der Aufruf erfolgt als [[asynchrone Kommunikation]], d.&nbsp;h. während die Daten vom Server geladen werden, kann der User weiter mit der Oberfläche interagieren. Sind die Daten fertig geladen, dann wird eine zuvor benannte JavaScript-Funktion aufgerufen, die die Daten in die Webseite einbinden kann.

Im Ergebnis erhält man so eine Benutzeroberfläche, die sehr viel zügiger auf Benutzereingaben reagiert: teilweise weil wesentlich weniger Daten zwischen Webbrowser und Webserver ausgetauscht werden müssen, teilweise weil die Daten asynchron geladen werden. Zudem wird die Webserver-Last reduziert, da schon viele Verarbeitungsschritte clientseitig getätigt werden können.

Man stelle sich eine Webanwendung zur Verwaltung von Fotografien vor. Möchte der Benutzer einem Foto eine Beschreibung oder einen Titel hinzufügen, so muss mit einem traditionellen Programmieransatz die gesamte Seite einschließlich der verkleinerten Foto-Ansichten neu übertragen werden. Mit der Ajax-Technik wird nur der veränderte Bereich der Webseite erneuert. Das Beispiel veranschaulicht, wie es innerhalb der [[Flickr]]-Anwendung möglich ist, Titel einzelner Bilder zu verändern.

== Beispiel ==
Im Wikibook „Websiteentwicklung“ (siehe [[#Weblinks|Weblinks]]) findet sich ein einfaches Beispiel-Programm. Dabei wird die JavaScript-Library [[Prototype (Klassenbibliothek)|prototype]] als Ajax-Engine verwendet, welche die Details der asynchronen Kommunikation mit dem Webserver abhandelt. Auf der Serverseite wird ein PHP-Skript verwendet, das kein XML, sondern ein HTML-Fragment liefert.

Der Ajax-Request wird folgendermaßen gesendet:

<syntaxhighlight lang="javascript">
var myAjax = new Ajax.Request(
"datum.php",
{ method: 'get', onComplete: zeige_datum }
);
</syntaxhighlight>

Das PHP-Skript liefert ein Stück unformatierten Text, den man als HTML-Fragment auffassen kann:

<syntaxhighlight lang="php">
<?php
echo "Jetzt ist es " . date("r");
?>
</syntaxhighlight>

Sobald die Daten fertig zum Browser übertragen wurden, wird die Funktion '''zeige_datum''' aufgerufen, die dann die Daten weiter verarbeiten und in die Webseite einbinden kann. Dazu werden in diesem Beispiel nur herkömmliche JavaScript-Methoden und Eigenschaften verwendet.

<syntaxhighlight lang="javascript">
function zeige_datum( originalRequest ) {
document.getElementById('output').innerHTML = originalRequest.responseText;
}
</syntaxhighlight>


== Die Ajax-Plattform ==
== Die Ajax-Plattform ==
[[Datei:Prozessfluss-ajax.svg|mini|hochkant=2|Der Prozessfluss einer Anwendung, wie er sich bei Ajax darstellt]]


Da Ajax-Anwendungen dem [[Client-Server-Modell]] entsprechen, ist sowohl innerhalb des Webbrowsers als auch auf dem entsprechenden Server eine Komponente notwendig, die eine Ajax-basierte Kommunikation ermöglicht.
Ajax-Anwendungen können in Webbrowsern, welche die zuvor genannten Techniken unterstützen, ausgeführt werden. Die Ajax-Anwendung, die in einem Webbrowser ausgeführt wird, bezeichnet man als ''Client-Plattform''.


=== Client-Plattform ===
Die eigentliche Programmlogik oder der [[Workflow|Prozessfluss]] der Anwendung ist auf einem Server hinterlegt. Dies geschieht beispielsweise in Form von [[Enterprise Java Beans|EJB]]s, [[.NET]]-Komponenten oder aber in Form von Skript-Komponenten wie sie beispielsweise von der Skriptsprache [[Ruby]] zur Verfügung gestellt werden. Das Ajax-Konzept selbst erfordert keine spezifische Technik, mittels derer die Server-seitige Programmlogik umgesetzt werden muss. Sowohl der Server als auch die Anwendungslogik werden im Ajax-Kontext als ''Server-Plattform'' bezeichnet.
Die Umsetzung innerhalb des Webbrowsers erfolgt in den meisten Fällen mit der Hilfe einer umfangreichen Funktionalität auf der Basis von [[JavaScript]] und dem [[XMLHttpRequest]]-Objekt. Dabei lassen sich zwei Kategorien von Plattformen unterscheiden:

Direkte Ajax-Implementierungen: Diese stellen auf dem Client eine API zur direkten Kommunikation von Daten zur Verfügung. Dazu ist auf dem Server neben der initial angezeigten Seite ein weiterer Einstiegspunkt zur Übermittlung der Daten zu realisieren.

Indirekte Ajax-Implementierungen: Dabei werden neue HTML-Fragmente vom Server an den Client gesendet, um die vorhandene Seite zu ergänzen oder Teile davon zu ersetzen. Meist wird dazu auf dem Server die komplette anzuzeigende Seite neu aufgebaut, aber nur die relevanten Unterschiede zum Client übertragen.

Beide Verfahren haben Vor- und Nachteile. Während die direkte Verwendung oft serverseitige Ressourcen schont, vereinfacht die indirekte Variante die Implementierung.

=== Server-Plattform ===
Die eigentliche Programmlogik oder der [[Arbeitsablauf|Prozessfluss]] der Anwendung ist auf einem Server hinterlegt. Dies geschieht beispielsweise in Form von [[Jakarta Enterprise Beans|EJBs]], [[.NET (Plattform)|.NET]]-Komponenten oder aber in Form von Skript-Komponenten, wie sie beispielsweise Bestandteil der Skriptsprache [[Ruby (Programmiersprache)|Ruby]] sind. Das Ajax-Konzept selbst erfordert keine spezifische Technik, mittels derer die serverseitige Programmlogik umgesetzt werden muss. Sowohl der Server als auch die Anwendungslogik werden im Ajax-Kontext als ''Server-Plattform'' bezeichnet.

Eine wesentliche Aufgabe des Servers bei Ajax-Applikationen ist die Bereitstellung der im Browser benötigten Komponenten.
Da aufgrund der Sicherheitseinstellungen der Browser ein [[Cross-Site-Scripting]] nicht erlaubt ist ([[Same-Origin-Policy]]), muss der Webserver auch Daten von anderen Servern für den Client zur Verfügung stellen und damit die Funktion eines [[Proxy (Rechnernetz)|Proxy]]-Rechners übernehmen.


== Vor-/Nachteile und Kritik ==
== Vor-/Nachteile und Kritik ==
=== Kein Neuladen aufgebauter Seiten ===
<!-- @@issue-0820 -->Der größte Vorteil der Ajax-Technologie ist die Tatsache, dass Daten verändert werden können, ohne dass die komplette Webseite vom Webbrowser neu erzeugt werden muss. Dies erlaubt es Web-Anwendungen, auf Benutzereingaben schneller zu reagieren. Zudem wird vermieden, dass [[Redundanz|redundante]] Daten, die sich unter Umständen nicht geändert haben, fortwährend über das Internet übertragen werden müssen. Da die Ajax-Technologien frei zugänglich sind, werden sie unabhängig vom [[Betriebssystem]] von den Webbrowsern unterstützt, die auch JavaScript unterstützen. Ein Browser-[[Plugin]] wird nicht benötigt. Dies setzt voraus, dass die JavaScript-Unterstützung nicht deaktiviert wurde – genau das stellt den größten Kritikpunkt und die größten Probleme beim Einsatz dar. Vergleichbare Techniken, wie etwa [[Macromedia]]s [[Shockwave]] oder [[Flash]], sind immer noch mit dem Nachteil behaftet, dass sie ein Browser-[[Plugin]] benötigen und nicht immer für alle [[Plattform (Computer)|Plattformen]] verfügbar sind.
Der größte Vorteil der Ajax-Technologie ist die Tatsache, dass Daten verändert werden können, ohne dass die komplette Webseite vom Webbrowser neu geladen werden muss. Dies erlaubt es Webanwendungen, auf Benutzereingaben schneller zu reagieren. Zudem wird vermieden, dass statische Daten, die sich unter Umständen nicht geändert haben, fortwährend über das Internet übertragen werden müssen.


=== Kein Browser-Plug-in wird benötigt ===
<!-- @@issue-0821 -->Wie es auch bei DHTML-Anwendungen zur Praxis geworden ist, muss auch eine Ajax-basierte Anwendung rigoros getestet werden, um so die ''Eigenarten'' der diversen Webbrowser entsprechend behandeln zu können. Im Laufe der Zeit hat sich die Ajax-Technologie weiter entwickelt, was dazu führte, dass für diese nun diverse Programmbibliotheken zur Verfügung stehen. Diese können zu einer fehlerfreien und einfacheren Anwendungsprogrammierung beitragen.
Da die Ajax-Technologien frei zugänglich sind, werden sie unabhängig vom [[Betriebssystem]] von den Webbrowsern unterstützt, die auch JavaScript unterstützen. Ein Browser-[[Plug-in]] wird nicht benötigt. Dies setzt voraus, dass die JavaScript-Unterstützung nicht deaktiviert wurde – genau das stellt den größten Kritikpunkt und die größten Probleme beim Einsatz dar. Vergleichbare Techniken, wie etwa [[Adobe Inc.|Adobes]] [[Shockwave]] oder [[Adobe Flash|Flash]], sind jedoch immer noch mit dem Nachteil behaftet, dass sie [[proprietär]] sind, ein Browser-Plug-in benötigen und nur für bestimmte [[Plattform (Computer)|Plattformen]] verfügbar sind.


=== Umfangreiche Tests erforderlich ===
<!-- @@issue-0822 -->Es wurden ebenfalls Techniken entwickelt, wie beispielsweise die von Microsoft entwickelte Webforms-Technologie oder die von Sun entwickelte [[JavaServer Faces|JSF]]-Technologie, die es ermöglichen, Anwendungen zu entwerfen, die einer Desktop-Anwendung nahe kommen. Zudem bieten diese die Möglichkeit, auch Benutzer, die einen Webbrowser ohne JavaScript-Unterstützung einsetzen, in geeigneter Weise zu bedienen. Der Browser-Typ des jeweiligen Benutzers wird hierbei serverseitig ermittelt, sodass es möglich ist diesem nur HTML-Seiten zu schicken, die auch von dessen Webbrowser dargestellt werden können.
Wie es auch bei [[Dynamisches HTML|dynamischen HTML]]-Anwendungen zur Praxis geworden ist, muss auch eine Ajax-basierte Anwendung rigoros getestet werden, um so die ''Eigenarten'' der diversen Webbrowser entsprechend behandeln zu können. Im Laufe der Zeit hat sich die Ajax-Technologie weiterentwickelt, was dazu führte, dass für diese nun diverse [[Programmbibliothek]]en zur Verfügung stehen. Diese können zu einer weitestgehend fehlerfreien und einfacheren Anwendungsprogrammierung beitragen. Bekannte JavaScript-Bibliotheken sind [[Dojo Toolkit]], [[jQuery]], [[Prototype (Klassenbibliothek)|Prototype]], [[Xajax]] und [[Qooxdoo]] (speziell für Anwendungen, die Desktops ähneln sollen).


=== Serverseitige Browsererkennung ===
<!-- Das Browser-Back-Button Problem ist zwar bekannt, hatte aber gerade keinen Link auf eine deutsche Seite -->
Es wurden ebenfalls Techniken entwickelt, wie beispielsweise die von Sun entwickelte [[Jakarta Faces|JSF]]-Technologie, [[Apache Wicket]] oder die von Microsoft entwickelte Webforms-Technologie, die es ermöglichen, webbasierte Anwendungen zu entwerfen, die einer Desktop-Anwendung nahekommen. Zudem bieten diese die Möglichkeit, auch Benutzer, die einen Webbrowser ohne JavaScript-Unterstützung einsetzen, in geeigneter Weise zu bedienen. Der Browser-Typ des jeweiligen Benutzers wird hierbei serverseitig ermittelt, so dass es möglich ist, diesem nur HTML-Seiten zu schicken, die auch von dessen Webbrowser dargestellt werden können.
Einer der häufigsten Vorwürfe gegen die Ajax-Technologie ist die Tatsache, dass es schwer möglich ist, die Funktionalität des Zurück-[[Schaltfläche|Button]]s des Browsers zu gewährleisten (siehe: [[Jakob Nielsen]]s [[1999]] [http://www.useit.com/alertbox/990530.html Top-10 New Mistakes of Web Design]). Es besteht die Gefahr, dass das Drücken des Zurück-Buttons nicht den vorherigen Zustand der Anwendung wiederherstellt, da Browser für gewöhnlich nur statische Seiten in ihrer Historie abspeichern. Das Unterscheiden zwischen einer statischen Seite, die gänzlich in den [[Cache]] des Browsers geladen wurde, und einer Seite, die auf dynamische Weise verändert wurde, mag ''kniffelig'' sein. Grundsätzlich erwartet ein Benutzer, dass ein Drücken des Zurück-Buttons die zuletzt getätigte Aktion revidiert. Bei Ajax ist dies nicht immer der Fall. Software-Entwickler haben verschiedenste Lösungen erfunden, um diesem Problem zu begegnen. Die meisten Lösungen basieren auf so genannten [[Iframe]]s, ein weiteres HTML-Element. Das Iframe-Element ist so gestaltet, dass dieses für den Nutzer nicht sichtbar ist und wird benutzt, um die Browser-Historie des Nutzers auf diesem Umweg zu ''befüllen''. ([[Google Maps]] führt z.B. eine Suche in einem nicht sichtbaren Iframe-Element durch und befüllt mit den daraus resultierenden Ergebnissen das Ajax-Element der sichtbaren Webseite). Das [http://dojotoolkit.org/ Dojo-Toolkit] erlaubt es, die einzelnen Ajax-Anforderungen mittels so genannter [[Callback-Funktion|Callback]]s zu verfolgen. Die Callbacks werden immer dann ausgelöst, wenn der Nutzer den Zurück-Button des Browsers betätigt. Über diesen Umweg ist es möglich, den vorherigen Zustand der Anwendung wiederherzustellen.


=== Verwendung der „Zurück“-Schaltfläche ===
Ein durchaus ähnlich gelagertes Problem ist die Tatsache, dass es bei Webseiten, die dynamisch aktualisiert werden, beinahe unmöglich ist, ein [[Bookmark]] auf einen ganz bestimmten Zustand einer Web-Anwendung zu setzen. Auch für dieses Problem wurden zwischenzeitlich Lösungen entwickelt. Meistens wird in diesem Zusammenhang der [[Anker (HTML)|Anker]] in der gegenwärtigen [[URL]] verwendet, der nach der Raute (''#'') steht. Auf diese Weise ist es möglich, den Prozessfluss einer Anwendung zu verfolgen. Zudem wird es dem Benutzer so ermöglicht, über den genannten URL-Teil einen bestimmten Anwendungszustand wiederherzustellen. Viele Webbrowser ermöglichen es, den Anker durch JavaScript dynamisch zu aktualisieren. Dies ermöglicht es einer Ajax-Anwendung, den Inhalt der dargestellten Webseite parallel zur Verarbeitung zu aktualisieren. Diese Lösungsansätze beheben auch einige der Probleme, die durch den nicht funktionierenden Zurück-Buttons entstehen.
Einer der am häufigsten beklagten Nachteile der Ajax-Technologie ist die Tatsache, dass es schwer möglich ist, die Funktionalität der „Zurück“-[[Schaltfläche]] des Browsers zu gewährleisten.<ref name="JN">[[Jakob Nielsen (Schriftsteller)|Jakob Nielsen]]: [http://www.useit.com/alertbox/990530.html Top-10 New Mistakes of Web Design], 1999</ref> Es besteht die Gefahr, dass das Klicken der „Zurück“-Schaltfläche nicht den vorherigen Zustand der Anwendung wiederherstellt, da Browser für gewöhnlich nur statische Seiten in ihrer Historie abspeichern. Das Unterscheiden zwischen einer statischen Seite, die gänzlich in den [[Cache]] des Browsers geladen wurde, und einer Seite, die auf dynamische Weise verändert wurde, mag knifflig sein. Grundsätzlich erwartet ein Benutzer, dass ein Klicken der „Zurück“-Schaltfläche die zuletzt getätigte Aktion revidiert. Auch wird oftmals durch das Klicken der „Zurück“-Schaltfläche versucht, eine Seite im Navigationspfad zurückzublättern. Aufgrund der Dynamik, mit welcher viele Ajax-Anwendungen behaftet sind, ist dies nicht immer möglich, da die einzelnen Navigationsschritte des Nutzers technisch nur sehr schwer reproduzierbar sind. [[Softwareentwickler]] müssen eine Änderung des Zustandes dem Browser explizit mitteilen. Moderne Browser bieten dafür die History-API an. Eine weit verbreitete Variante ist auch, die URL mit einem Hashtag und einem Client-Pfad zu ergänzen, der den aktuellen Navigationszustand einer Web-Applikation repräsentiert. Insbesondere wird hier der sogenannte ''[[Shebang|Hash-Bang]]'' (<code>#!</code>)<ref name="HashUri">{{cite web|url=https://www.w3.org/blog/2011/05/hash-uris/ |title=Hash URIs |publisher=w3.org |date=2011-05-12 |accessdate=2017-03-01 |language=en}}</ref> diskutiert, um URLs zu diesem Zweck zu differenzieren.


=== Polling-Problem ===
Die [[Latenz]]zeit, also das zeitliche Intervall zwischen einer HTTP-Anfrage des Browsers und der zugehörigen Server-Antwort, muss bei der Entwicklung einer Ajax-Anwendung berücksichtigt werden. Ohne ein klar ersichtliches [[Feedback]] für den Benutzer ([http://www.xml.com/pub/a/2005/08/22/ajax.html]), vorausschauendes Laden einzelner Anwendungsdaten ([http://www.jonathanboutelle.com/mt/archives/2004/08/latency_must_di.html]) und einem korrekten Umgang mit dem <code>XMLHttpRequest<code>-Objekt ([http://ajaxblog.com/archives/2005/06/01/async-requests-over-an-unreliable-network]), kann sich einem Benutzer der Eindruck aufdrängen, dass die gesamte Anwendung nur ''zähflüssig'' auf dessen Aktionen reagiert. Für gewöhnlich ist dies ein Umstand, der sich dem Benutzer nur schwer erschließt ([http://www.lastcraft.com/blog/index.php?p=19]). Aus diesem Grund ist es wichtig, so genannte visuelle Feedbacks wie beispielsweise das Symbol einer Sanduhr zu verwenden, um den Benutzer darauf aufmerksam zu machen, dass momentan gewisse Hintergrundaktivitäten stattfinden oder Daten bzw. Inhalte geladen werden.
[[Datei:Ajax request response.svg|mini|hochkant=2|Schematische Darstellung des Request-Response-Verhaltens einer herkömmlichen Browser-basierten Anwendung (inkl. Thread-Modell). Pro Anfrage eines Clients wird ein Thread erzeugt. Nachdem die HTTP-Anfrage bearbeitet wurde, werden Ressourcen, die durch die Anfrage belegt wurden, sofort wieder freigegeben.]]


Da Webserver vor Einführung von Standards wie [[WebSocket|Websockets]] nicht in der Lage waren, asynchrone Events an einen Ajax-Client durchzuleiten, wenn sie von diesem nicht angefordert wurden, musste der Ajax-Client seinerseits permanent beim Webserver nachfragen (das eigentliche [[Sendeaufruf|Polling]]), ob ein neues Event erzeugt wurde bzw. eine Änderung im Anwendungszustand stattgefunden hat. Dies erzeugt eine völlig andere Auslastung auf einem Webserver, verglichen mit der Last, die von herkömmlichen Anwendungen erzeugt wird.
<!-- @@issue-0823 -->Unabhängig von den technischen Schwierigkeiten von Ajax gab es in der Vergangenheit immer wieder Kritik daran, dass das Unternehmen ''Adaptive Path'', welches den Begriff ''Ajax'' ursprünglich geprägt hat, oder andere Unternehmen den Begriff als [[Marketing]]-Vehikel benutzen, obwohl die Grundlagen von Ajax auch in der Vergangenheit weitestgehend bekannt waren.


Um ein andauerndes Polling zu vermeiden, wurde die Technik entwickelt, Poll-Antworten solange zurückzuhalten, bis ein tatsächliches Ereignis oder ein [[Timeout (Netzwerktechnik)|Timeout]] eintritt. Folglich ist mit einer Ajax-Anwendung im Idealfall serverseitig eine Anfrage verknüpft, die letztlich dazu benutzt werden kann, dem Anwendungs-Client beim Eintreten eines entsprechenden Events eine Antwort zu schicken.
=== [[Barrierefreies Internet]] ===


Diese Technik wirft allerdings neue Probleme auf. Bisher war es üblich, pro Anfrage an den Server einen [[Thread (Informatik)|Thread]] zu erzeugen, dessen Ressource sofort nach dem Abarbeiten der Anfrage wieder freigegeben werden konnten. Bei der beschriebenen Polling-Technik ist diese Freigabe der Ressourcen jedoch nicht möglich. Es bleiben also weiterhin Ressourcen, wie beispielsweise [[Datenspeicher|Speicher]], belegt. Dieses Problem stellt neue Anforderungen an die [[Skalierbarkeit]] einer Ajax-Anwendung. Eine mögliche Lösung dieses Problems ist die Verwendung eines [[Anwendungsserver]]s, der das Prinzip der [[Continuation]] (deutsch „Fortsetzung“) unterstützt.
Soll die Ajax-Technologie eingesetzt werden, so stellt dies eine Herausforderung dar, wenn die Web-Anwendung den [[WAI]]-Regeln folgen soll. Software-Entwickler müssen aus diesem Grund Alternativen anbieten, wenn eine Webseite beispielsweise auch für sehbehinderten Nutzern mit einem [[Screenreader]] zugänglich sein soll. Dies ist notwendig, da die Mehrzahl aller Ajax-Anwendungen für herkömmliche grafische Webbrowser entworfen wurden.


=== Lesezeichen ===
=== [[Suchmaschine]]n / [[Deep Link]]s ===
Ein ähnlich gelagertes Problem ist die Tatsache, dass es bei Webseiten, die dynamisch aktualisiert werden, beinahe unmöglich ist, ein [[Lesezeichen (World Wide Web)|Lesezeichen]] auf einen ganz bestimmten Zustand einer Webanwendung zu setzen. Auch für dieses Problem wurden zwischenzeitlich Lösungen entwickelt. Meistens wird in diesem Zusammenhang der [[Anker (HTML)|Anker]] in der gegenwärtigen [[Uniform Resource Locator|URL]]-Adresse verwendet, der nach der Raute ''(#)'' steht. Auf diese Weise ist es möglich, den Prozessfluss einer Anwendung zu verfolgen. Zudem wird es dem Benutzer so ermöglicht, über den genannten URL-Teil einen bestimmten Anwendungszustand wiederherzustellen. Viele Webbrowser ermöglichen es, den Anker durch JavaScript dynamisch zu aktualisieren. Dies ermöglicht es einer Ajax-Anwendung, den Inhalt der dargestellten Webseite parallel zur Verarbeitung zu aktualisieren. Diese Lösungsansätze beheben auch einige der Probleme, die durch den nicht funktionierenden Zurück-Knopf entstehen.


=== Rückmeldung ===
Es gibt verschiedene Möglichkeiten, eine Ajax-Anwendung einer [[Suchmaschine]] zugänglich zu machen. Die einzelnen Ansätze variieren im Grad der Indizierung, die erreicht werden kann, und der Art, wie dies erreicht wird. Für einige Webseiten, wie beispielsweise die eines Studiengangs einer Universität, ist es notwendig, dass jeder einzelne Bereich durch eine Suchmaschine erfasst werden kann. Eine Seite jedoch, die einen Webmail-Service zur Verfügung stellt, wird dies nicht erforderlich machen. Nachfolgend sind einige Strategien genannt, die es ermöglichen einen Webauftritt durch eine Suchmaschine indizieren zu lassen:
[[Datei:Ajax-MVC-Modell (Variante I).svg|mini|hochkant=2|Das MVC-Entwurfsmuster, angewandt auf den gesamten Inhalt eines Browserfensters]]


Die [[Verzögerung (Telekommunikation)|Latenzzeit]], also das zeitliche Intervall zwischen einer HTTP-Anfrage des Browsers und der zugehörigen Server-Antwort, muss bei der Entwicklung einer Ajax-Anwendung berücksichtigt werden. Ohne eine klar ersichtliche [[Rückkopplung|Rückmeldung]] für den Benutzer,<ref name="XML">{{cite web|url=http://www.xml.com/pub/a/2005/08/22/ajax.html |title=Remote Scripting with AJAX, Part 2 |publisher=Xml.com |date= |accessdate=2010-09-11|language=en}}</ref> vorausschauendes Laden einzelner Anwendungsdaten<ref name="JB">Jonathan Boutelle: {{Webarchiv |url=http://www.jonathanboutelle.com/mt/archives/2004/08/latency_must_di.html |wayback=20070929102006 |text=Latency Must Die: Reducing Latency by Preloading Data}}, 26. August 2004</ref> und einen korrekten Umgang mit dem <code>XMLHttpRequest</code>-Objekt<ref name="AB">{{Webarchiv |url=http://ajaxblog.com/archives/2005/06/01/async-requests-over-an-unreliable-network |wayback=20051023145137 |text=Ajax Blog – HTML, Javascript and XML coding techniques for Web 2.0 |archive-today=}} Async Requests over an Unreliable Network</ref> kann sich einem Benutzer der Eindruck aufdrängen, dass die gesamte Anwendung nur ''zähflüssig'' auf dessen Aktionen reagiert. Für gewöhnlich ist dies ein Umstand, der sich dem Benutzer nur schwer erschließt.<ref name="MB">Marcus Baker: {{Webarchiv |url=http://www.lastcraft.com/blog/index.php?p=19 |wayback=20051212131258 |text=Listen kids, AJAX is not cool}} (Archivversion), 3. Juni 2005, abgerufen am 7. März 2014.</ref> Aus diesem Grund ist es wichtig, sogenannte visuelle Feedbacks wie beispielsweise das Symbol einer Sanduhr zu verwenden, um den Benutzer darauf aufmerksam zu machen, dass momentan gewisse Hintergrundaktivitäten stattfinden oder Daten, etwa Inhalte, geladen werden.
* ''Lightweight Indexing'': An der eigentlichen Webseite werden keine strukturellen Änderungen vorgenommen. Es werden jedoch bereits existierende [[HTML-Element|Elemente]], wie beispielsweise [[Meta-Tag]]s oder Überschriften-Elemente für die Indizierung verwendet.
* ''Extra Link Strategy'': Zusätzliche Links werden auf der Webseite platziert, denen [[Suchroboter]] folgen können, um so den gesamten Webauftritt indizieren zu können. Die zusätzlichen Links müssen nicht sichtbar sein, da sie nur für den Suchroboter einer Suchmaschine gedacht sind.
* ''Secondary Site Strategy'': Eine zweite Webseite wird entworfen. Diese ist für eine Suchmaschine voll zugänglich.


=== Differenzierung zwischen Konzept und Begriff ===
== Webbrowser die Ajax-tauglich sind ==
Abgesehen von den technischen Schwierigkeiten, die mit Ajax einhergehen, gab es in der Vergangenheit immer wieder Kritik daran, dass das Unternehmen ''Adaptive Path,'' welches den Begriff ''Ajax'' ursprünglich geprägt hat, oder andere Unternehmen den Begriff als [[Marketing]]-Vehikel benutzen. In diesem Zusammenhang wird vor allem deshalb Kritik geübt, da die Grundlagen von Ajax vor der Prägung des Begriffs entwickelt wurden. Allerdings hat die Prägung des Begriffs auch dazu beigetragen, die Diskussion rund um den Browser als [[Fat Client]] neu zu beleben.


=== Unterstützung des MVC-Architekturmusters ===
* [[Safari (Browser)|Apple Safari]] 1.2 und höher
[[Datei:Ajax-MVC-Modell (Variante II).svg|mini|hochkant=2|Das MVC-Entwurfsmuster, angewandt auf einzelne Elemente einer HTML-Seite]]
* [[Konqueror]]
* Microsoft [[Internet Explorer]] (und Browser die IE-basiert sind) 4.0 und höher
* [[Mozilla Firefox]], d.&nbsp;h. die Gecko-basierte Familie der Mozilla-Browser (Firefox 1.0 und Mozilla 1.4 oder höher)
* [[Netscape]] 7.1 und höher
* [[Opera]] 7.6 und höher


Zwar unterstützt eine Ajax-basierte Umgebung nicht per se das [[Model View Controller|MVC]]-[[Architekturmuster]], jedoch kann dieses sehr einfach umgesetzt werden. Eine Umsetzung kann das gesamte Browser-Fenster als Grundlage für die Präsentationsschicht haben. Auch ermöglicht es Ajax, ein zyklisches bzw. geschachteltes MVC-Modell umzusetzen. In diesem Fall besitzen einzelne Präsentationsschicht-Elemente einer Webseite sowohl einen separaten Controller als auch ein separates Modell. Beide Zusammenhänge sind in den Abbildungen dieses Artikels dargestellt.
== Literatur ==
* Jesse James Garrett: ''Ajax: A New Approach to Web Applications.'' Adaptive Path LLC, 18. Februar 2005, [http://www.adaptivepath.com/publications/essays/archives/000385.php] (englisch) (Der Essay, der den Namen geprägt hat)
* Louis Rosenfeld, Peter Morville: ''Information Architecture for the World Wide Web.'' 2. Auflage. O'REILLY, August 2002, ISBN 0596000359 (sehr gute Lektüre, die auch die Probleme behandelt, die beim Einsatz der Ajax-Technologie auftreten können)
* Jennifer Fleming: ''Web Navigation.'' O'REILLY, Mai 1999, ISBN 1565923510
* Olaf Bergmann, Carsten Bormann: ''AJAX - Frische Ansätze für das Web-Design'' 1. Auflage. SPC TEIA Lehrbuch Verlag, Oktober 2005, ISBN 3935539266
* Stuart Langridge: ''DHTML Utopia.'' SitePoint, 30. Juni 2005, ISBN 0957921896 ( [http://www.sitepoint.com/books/dhtml1/ Webseite des Buches] (englisch))
* Ryan Asleson, Nathaniel T. Schutta, Nate T. Schutta: ''Foundations of Ajax.'' Apress, 17. Oktober 2005 ISBN 1590595823 ([http://www.apress.com/book/bookDisplay.html?bID=10042 Webseite d. Buches] (englisch))
* Dave Crane, Eric Pascarello: ''Ajax in Action.'' Manning Publications, November 2005, ISBN 1932394613 (noch nicht erschienen, [http://www.manning.com/books/crane/chapters einzelne Kapitel als Online-Version] (englisch))
<!--
=========== Diese Bücher sind noch in Vorbereitung ===========


=== Barrierefreies Internet ===
* Justin Gehtland, Ben Galbraith: ''Pragmatic Ajax - A Web 2.0 Primer.'' Pragmatic Bookshelf, Februar 2006, ISBN 0-9766940-8-5
{{Hauptartikel|Barrierefreies Internet}}
* Rich Gibson, Scuyler Erle: ''Google Maps Hacks.'' O'Reilly, Januar 2006, ISBN 0-596-10161-9
Soll die Ajax-Technologie eingesetzt werden, so stellt dies eine Herausforderung dar, wenn die Webanwendung den [[Web Accessibility Initiative|WAI]]-Regeln folgen soll. Software-Entwickler müssen aus diesem Grund Alternativen anbieten, wenn eine Webseite beispielsweise auch für sehbehinderte Nutzer mit einem [[Screenreader]] zugänglich sein soll. Dies ist notwendig, da die Mehrzahl aller Ajax-Anwendungen für herkömmliche grafische Webbrowser entworfen wurden.
* Cameron Adams, James Edwards: ''JavaScript Anthology.'' SitePoint, Dezember 2005, ISBN 0-9752402-6-9
-->


Momentan kommt hierfür oft der sogenannte [[Hook-Ansatz]] ins Gespräch, wobei zunächst eine rein statische Anwendung an den Browser geschickt wird und dann bei aktiviertem Javascript alle AJAX Funktionalitäten eingebettet werden.
== Weblinks ==
<!--
Nicht ohne vorhergehende Diskussion neue Weblinks zufügen, siehe Diskussionsseite.
Als Negativ-Beispiel sei hier der englische Ajax-Artikel genannt. Dort gibt es inzwischen
mehr Links als Text. Es macht deshalb keinen Sinn jede 0815-Anwendung aufzulisten Vor
allem dann nicht, wenn man bei der entsprechenden Anwendung/Bibliothek nicht klar erkennt,
dass es sich um ein Novum handelt.


=== Suchmaschinen/Deep Links ===
Zum Verständnis:
{{Siehe auch|Surface Links und Deep Links}}
----------------
Es gibt verschiedene Möglichkeiten, eine Ajax-Anwendung einer [[Suchmaschine]] zugänglich zu machen. Die einzelnen Ansätze variieren im Grad der Indizierung, der erreicht werden kann, und der Art, wie dies erreicht wird. Für einige Webseiten, wie beispielsweise die eines Studiengangs einer Universität, ist es notwendig, dass jeder einzelne Bereich durch eine Suchmaschine erfasst werden kann. Eine Seite jedoch, die einen Webmail-Service zur Verfügung stellt, wird dies nicht erforderlich machen. Nachfolgend sind einige Strategien genannt, die es ermöglichen, einen [[Website|Webauftritt]] durch eine Suchmaschine indizieren zu lassen:


; Lightweight Indexing
Die hier vorliegenden Weblinks sind ein quasi Konsens, der getroffen wurde, lange bevor ich -
: An der eigentlichen Webseite werden keine strukturellen Änderungen vorgenommen. Es werden jedoch bereits existierende [[Element (Auszeichnungssprache)|Elemente]] wie beispielsweise [[Meta-Element|Meta-Tags]] oder Überschriften-Elemente für die Indizierung verwendet.
Daniel S. Haischt - mich in einem grossen Maß um den Artikel gekümmert habe. Natürlich kann
; Extra Link Strategy
jeder seine Vorschläge für neue Links einbringen. Da die aktuelle Liste aber schon relativ
: Zusätzliche Links werden auf der Webseite platziert, denen [[Webcrawler|Suchroboter]] folgen können, um so den gesamten Webauftritt indizieren zu können. Die zusätzlichen Links sollten allerdings sichtbar sein, auch wenn sie nur für den Suchroboter einer Suchmaschine gedacht sind. Unsichtbare Links sind ein Spezialgebiet moderner Suchmaschinen und sie werden als Täuschungsmanöver angesehen.
lang ist, ist es auch wichtig Links bevor diese platziert werden, zu diskutieren, um deutlich
; Secondary Site Strategy
zu machen, warum gerade dieser Link sehr wichtig ist. Und eines zum Schluss - natürlich ist
: Eine zweite Webseite wird entworfen. Diese ist für eine Suchmaschine voll zugänglich und bildet entweder die Funktionen der Ajax-Seite nach oder verweist vom entsprechenden Suchwort auf deren Funktionen.
allen Beteiligten klar, dass es sich bei Google Earth um ein Produkt-Link handelt. Google ist
aber ein Ajax-Veteran und wie gesagt den Link auf die diversen Google Applikationen gibt es
schon, seit dieser Artikel existiert. Also meine bitte, nicht kindisch zu sein, sondern mir
ist es wichtig dass in einer konstruktiven, sinvollen Weise am Artikel gearbeitet wird.
-->
=== Technische Quellen ===
<!--
Nicht ohne vorhergehende Diskussion neue Weblinks zufügen, siehe Diskussionsseite und
Kommentar unter der Rubrik Wenlinks.
-->
* [http://www.adaptivepath.com/publications/essays/archives/000385.php Ajax: A New Approach to Web Applications], der Aufsatz, der den Namen geprägt hat (englisch)
* [http://ajaxblog.com/ Ein Weblog über Ajax] (englisch)
* [http://www.ajax-scripting.de/ Weblog zu Ajax]
* [http://rajshekhar.net/blog/archives/85-Rasmus-30-second-Ajax-Tutorial.html Rasmus' 30 second Ajax Tutorial] (englisch) Grundkonzept, auf dem Ajax aufbaut
* [http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples Sammlung von Anwendungsbeispielen] (englisch)
* [http://www.ajaxpatterns.org/ Wiki mit Beispielen zu Ajax] (englisch)


An dieser Stelle sei darauf hingewiesen, dass das Anwenden der ''Extra Link Strategy'' und der ''Secondary Site Strategy'' von Suchmaschinen möglicherweise als Täuschungsversuch gewertet werden könnte ([[Cloaking]]). Die beste Möglichkeit, das zu vermeiden, besteht darin, in der Originalseite ein <code>&lt;meta name="robots" content="noindex" /></code> einzubauen.
=== Bibliotheken ===
<!--
Nicht ohne vorhergehende Diskussion neue Weblinks zufügen, siehe Diskussionsseite und
Kommentar unter der Rubrik Weblinks.
-->
* [http://www.ajaxmatters.com/r/resources?id=17 Linksammlung zu Ajax-Bibliotheken und SDKs] (englisch)
* [http://www.ajaxpatterns.org/Ajax_Frameworks Linksammlung zu Ajax-Frameworks] (englisch)


Seit Mai 2014 kann Google Ajax-Webseiten ohne weitere Hilfsmittel indexieren.<ref>Erik Hendriks, Michael Xu, Kazushi Nagayama: [https://webmasters.googleblog.com/2014/05/understanding-web-pages-better.html ''Understanding web pages better''.] 23. Mai 2014.</ref> Obengenannte Strategien sind für eine Indexierung durch Google nicht mehr in vollem Umfang nötig. Experimente von Bartosz Goralewicz deuten allerdings darauf hin, dass Webseiten, die JavaScript intensiv nutzen, mehr Ressourcen von Suchmaschinen-Bots (Crawler Budget) erfordern. Im Vergleich zu reinen HTML-Anwendungen werden bei JS-basierten Websites von Suchmaschinen-Bots insgesamt weniger Seiten gecrawlt.<ref>{{Internetquelle |url=https://www.youtube.com/watch?v=dN-3_9E8n3c&t=21m49s |titel=Advanced Technical SEO – Searchmetrics Summit 2017 |hrsg=searchmetrics – youtube.com |datum=2017-11-29 |sprache=en |abruf=2017-12-19}}</ref>
=== Anwendungsbeispiele ===
<!--
Nicht ohne vorhergehende Diskussion neue Weblinks zufügen, siehe Diskussionsseite und
Kommentar unter der Rubrik Wenlinks.


== Status/Verbreitung ==
Ferner werden Links ohne Mehrwert, die augenscheinlich Produkte bewerben, rigeros geloescht.
Folgende [[Webbrowser]] sind derzeit in der Lage, Ajax-Anwendungen auszuführen. Genannt wird immer nur die ''erste'' Software-Version, die es ermöglichte, Ajax-Anwendungen auszuführen. Alle Folgeversionen implizieren dieselbe Unterstützung.
-->
* [http://gollum.easycp.de Gollum] – Ein alternativer Wikipedia-Browser
* [http://www.google.com/webhp?complete=1&hl=en Google Suggest] (englisch) – zeigt Vorschläge an, die der Benutzer suchen könnte
* [[Google Maps]] – interaktive Weltkarte
* [http://www.virtualearth.com MSN Virtual Earth] (englisch) – interaktive Weltkarte
* [[Google Mail]] ist [[Webmail]] – Anbieter und bietet eine Art [[E-Mail-Programm]] im [[Browser]] an
* [[Flickr]] – Webanwendung zur Verwaltung von Photos
* [http://del.icio.us/ del.icio.us] (englisch) – Web-basiertes, kommunales Bookmark-System, schlägt "[[Tag (Informatik)|Tags]]" und Begriffe vor
* [http://demo.neximage.ch/ nexImage] – Web-basiertes Bildbearbeitungswerkzeug
* [http://www.et.fh-merseburg.de/person/meinike/ptablesvg/ Periodensystem der Elemente mit Online-Datenabfrage] als [[Scalable Vector Graphics|SVG]] – Anwendung (mit Plug-in von Adobe oder nativ ab Firefox 1.5)
* [http://www.24SevenOffice.com 24SevenOffice] - ERP/CRM


{| class="wikitable"
== Siehe auch ==
|-
* [[DHTML]]
! Name
* [[JSON]]
! Erste Version mit Ajax-Unterstützung
* [[Web Service]]
! Native Unterstützung
* [[WinLIKE]]
! Unterstützung durch ein [[Plug-in|Add-on]]
* [[:en:AFLAX|AFLAX]] (englisch)
! Kommentar
* [[:en:Single Page Application|SPA]] (englisch)
|-
| Microsoft [[Internet Explorer]]
| 5.0
| 7.0
| ja ([[ActiveX]]-Komponente)
| Die Version 4.0 unterstützte erstmals XML, jedoch nicht die für Ajax notwendige XMLHttpRequest-API. Diese API wurde später als ActiveX-Komponente realisiert und ist ab Version 7.0 nativer Bestandteil des IEs. Browser, die auf der Internet-Explorer-Technologie aufbauen, sind ebenfalls Ajax-kompatibel.
|-
| [[Mozilla Firefox]]
| 1.0
| ja
| —
| Auch alle anderen auf [[Gecko (Software)|Gecko]] basierenden Browser.
|-
| [[Opera (Browser)|Opera]]
| 8.0
| ja
| —
| —
|-
| [[Safari (Browser)|Safari]]
| 1.2
| ja
| —
| Apples Browser Safari basiert auf [[WebKit]], einem [[KHTML]]-[[Abspaltung (Softwareentwicklung)|Fork]].
|-
| [[Shiira]]
| 0.9.1.1
| ja
| —
| Shiira basiert auf [[WebKit]].
|-
| [[Google Chrome]]
| 0.2
| ja
| —
| Google Chrome basiert bis Version 27 auf Apples [[WebKit]], ab Version 28 kommt die ''WebKit''-[[Abspaltung (Softwareentwicklung)|Abspaltung]] ''[[Blink (Browser-Engine)|Blink]]'' zum Einsatz.
|-
| [[Netscape Navigator|Netscape]]
| 7.1
| ja
| —
| —
|-
| [[Konqueror]]
| 3.2
| ja
| —
| Das HTML-Rendering wird durch [[KHTML]] realisiert.
|-
| [[iCab]]
| 3.0 Beta
| ja
| —
| Ältere Versionen wie beispielsweise die Version für [[Motorola-68000er-Familie|m68k]]-basierte Computer unterstützen kein Ajax.
|}


== Anwendungsbeispiele ==
[[Kategorie:Web-Entwicklung]]
Die nachfolgenden Weblinks referenzieren typische Vertreter einer Anwendung auf Ajax-Basis. Einige haben durch ihre neuartige, intuitiv zu bedienende Benutzeroberfläche einen gewissen Bekanntheitsgrad erlangt. Die Linkliste selbst kann in diesem Zusammenhang ob der aktuellen Vielfalt an Ajax-Anwendungen nur eine beispielhafte Auswahl darstellen und ist bewusst sehr kurz gehalten.


<!-- Nicht ohne vorhergehende Diskussion neue Weblinks zufügen, siehe Diskussionsseite -->
[[cs:AJAX]]
* [[Virtueller Globus|Virtuelle Globen]]/Virtuelle [[Karte (Kartografie)|Landkarten]]
[[en:Ajax (programming)]]
** [[Google Maps]] – interaktive Weltkarte
[[es:AJAX]]
** [[OpenStreetMap]] – interaktive freie Weltkarte, geografisches Wiki
[[fr:AJAX]]
* [[Webanwendung|Webbasierte]] [[Office-Paket|Büroanwendungen]]
[[gl:AJAX]]
** [[AjaxWrite]] – [[Textverarbeitung]]
[[it:AJAX]]
** iRows – [[Tabellenkalkulation]]
[[ja:Ajax]]
* Anwendungen, welche Wikipedia nutzen
[[ko:Ajax]]
** Gollum Wikipedia-Browser
[[la:Aiax]]
* [[Social Software]]
[[lt:AJAX]]
** [[Flickr]] – Webanwendung zur Verwaltung von Fotos
[[nl:Ajax (webdesign)]]
** [[Delicious (Onlinedienst)|Delicious]] – Web-basiertes, kommunales Bookmark-System, schlägt „[[Tag (Informatik)|Tags]]“ und Begriffe vor
[[no:Ajax (Internett)]]
** [[Last.fm]] – Internetradio
[[pl:AJAX]]
** alle [[Poolworks|VZ Netzwerke]] – Soziale Netzwerke
[[pt:AJAX (Web)]]
[[ru:Ajax]]
** [[Facebook]]
* Vermischtes
[[vi:Ajax (lập trình)]]
** [[eyeOS]] – [[Web-Desktop]]
[[zh:AJAX]]
** [[Gmail]] – bietet eine Art [[E-Mail-Programm]] für den [[Webbrowser]] an.
** [[Google Suggest]] – zeigt Vorschläge an, die der Benutzer suchen könnte
** [[Meebo]] – Web-basierter Instant Messenger, unterstützt [[AOL]]-, [[ICQ]]-, [[Yahoo Messenger|Yahoo-Messenger]]-, [[Windows Live Messenger|MSN-Messenger]]-, [[Jabber Instant Messenger|Jabber]]- und [[Google Talk|Google-Talk]]-Konten
** [[ET-Chat]] – Webchatsystem
* [[Customer-Relationship-Management]] (CRM)
** [[24SevenOffice]]

== Einzelnachweise ==
<references />

== Literatur ==
<!-- Bitte nur vom feinsten – siehe [[WP:Literatur]] -->
<!-- Online-Quellen -->
* Jesse James Garrett: ''Ajax: A New Approach to Web Applications.'' Adaptive Path LLC, 18. Februar 2005, {{Webarchiv |url=http://www.adaptivepath.com/ideas/essays/archives/000385.php |wayback=20080702075113 |text=Der Aufsatz, der den Namen geprägt hat.}} (englisch)
<!-- Deutsche Bücher -->
* Christian Wenz: ''AJAX. schnell + kompakt.'' entwickler.press, 2006, ISBN 3-935042-92-2.
* Olaf Bergmann, Carsten Bormann: ''AJAX – Frische Ansätze für das Web-Design.'' 1. Auflage. SPC TEIA Lehrbuch Verlag, 2005, ISBN 3-935539-26-6 ([http://www.teialehrbuch.de/kurse/ajax/ HTML-Variante des Buchs]).
* Johannes Gamperl: ''Ajax.'' Galileo Computing, 2006, ISBN 3-89842-764-1.
* Denny Carl: ''Praxiswissen Ajax.'' O’Reilly, 2006, ISBN 3-89721-451-2.
* Hannes Pfeiffer: ''Ajax: Modernes Webscripting.'' Data Becker, 2006, ISBN 3-8158-2801-5.
* Dave Crane, Eric Pascarello, Darren James: ''Ajax in Action. Das Entwicklerbuch für das Web 2.0.'' Addison-Wesley, 2006, ISBN 3-8273-2414-9 ([https://www.manning.com/crane/ einzelne Kapitel als Online-Version], in englischer Sprache).
* Kai Jäger: ''Ajax in der Praxis.'' Springer, 2007, ISBN 978-3-540-69333-8.
<!-- Englische Bücher -->
* Ryan Asleson, Nathaniel T. Schutta: ''Foundations of Ajax.'' Apress, 2005, ISBN 1-59059-582-3.
* Nicholas C. Zakas: ''Professional Ajax.'' 2. Auflage. Wrox, 2007, ISBN 0-470-10949-1.

== Weblinks ==
{{Wikibooks|Websiteentwicklung: AJAX}}
<!-- Nicht ohne vorhergehende Diskussion neue Weblinks zufügen, siehe Diskussionsseite -->
* [https://developer.mozilla.org/de/docs/AJAX Artikel im Mozilla developer Center zu Ajax.]
* [https://www.xul.fr/en-xml-ajax.html Ajax Tutorial: Asynchronous Javascript + XML, Creating client-side dynamic Web pages] (englisch)

{{Lesenswert|10. Mai 2006|16528162}}
{{Normdaten|TYP=s|GND=7515401-8}}

[[Kategorie:Web-Entwicklung]]
[[Kategorie:JavaScript]]

Aktuelle Version vom 17. Mai 2025, 20:40 Uhr

Das Modell einer traditionellen Webanwendung (links) im direkten Vergleich mit einer Ajax-Webanwendung (rechts). Sämtliche Anwendungsdaten werden auf dem Server in einer Datenbank und/oder einem Legacy-System abgespeichert.

Ajax [ˈeidʒæks] (auch AJAX; Akronym von englisch Asynchronous JavaScript and XML) bezeichnet ein Konzept der asynchronen Datenübertragung zwischen einem Browser und dem Server. Dieses ermöglicht es, HTTP-Anfragen durchzuführen, während eine HTML-Seite angezeigt wird, und die Seite zu verändern, ohne sie komplett neu zu laden.

Der Aufbau einer Ajax-Anwendung

[Bearbeiten | Quelltext bearbeiten]

Eine Ajax-Anwendung basiert auf folgenden Web-Techniken:

  • HTML (oder XHTML)
  • Document Object Model (DOM) zur Repräsentation der Daten oder Inhalte
  • JavaScript zur Manipulation des Document Object Models und zur dynamischen Darstellung der Inhalte. JavaScript dient auch als Schnittstelle zwischen einzelnen Komponenten.
  • Das XMLHttpRequest-Objekt, Bestandteil vieler Browser, um Daten auf asynchroner Basis mit dem Webserver austauschen zu können
  • Eine andere Transportmethode ist On-Demand JavaScript,[1] bei der eine JavaScript-Datei per DOM-Manipulation angefordert wird.

Für den Aufruf von Ressourcen, Funktionen bzw. Methoden (API) gibt es die Ansätze:

  • REST – Aufruf mittels klassischer HTTP-Techniken, zum Beispiel GET http://localhost/person/4
  • SOAP – Übertragung von Methodenname und Parametern als XML-Dokument

Bei der asynchronen Übertragung der Daten haben sich verschiedene Verfahren etabliert:

  • REST-ähnliche Verfahren, um Nutzdaten in Textform zu übertragen
  • JSON, ein auf JavaScript zugeschnittenes, textbasiertes Format für Daten und Objekte
  • Diverse proprietäre XML-Formate
  • SOAP, ein Protokoll für Webservices, das meist XML als Austauschformat verwendet

Im Zusammenhang mit Ajax-Anwendungen werden auch andere Webtechnologien eingesetzt, die ursächlich aber keinen Zusammenhang mit Ajax haben:

  • CSS zur Formatierung einer Webseite
  • XSLT zur Datentransformation

Von wem die Begriffsschöpfung Ajax ursprünglich stammt, ist nicht mehr eindeutig nachvollziehbar. Sicher ist jedoch, dass den Begriff Jesse James Garrett (Mitarbeiter der Agentur Adaptive Path) in seinem Aufsatz Ajax: A New Approach to Web Applications[2] vom 18. Februar 2005 maßgeblich geprägt hat. Grundsätzlich waren die technologischen Grundlagen und die Vorgehensweise aber bereits bekannt und wurden generell mit dem Begriff XMLHttpRequest beschrieben. Wenn man so will, hat Garrett also die Marke Ajax erschaffen, um so diverse Software-Technologien unter einem Begriff zusammenzufassen.

Die Idee und die damit verbundenen Technologien, die dem Ajax-Konzept zugrunde liegen, gibt es in vergleichbarer Form schon seit etwa 1998. Die erste Komponente, die es ermöglichte, clientseitig eine HTTP-Anforderung auszulösen, basierte auf einer von Microsoft entwickelten Remote-Scripting-Komponente.[3] Anfänglich als Java-Applet umgesetzt, wurde sie später durch ein Inline-Frame-Element ersetzt. Später wurde diese Idee durch das Outlook-Web-Access-Team verfeinert. Diese Komponente ist Teil des Microsoft Exchange Servers und wurde auch bald, in Form einer XML-Unterstützung, als Bestandteil des Internet Explorers 4.0 ausgeliefert.[4] Manche Beobachter stufen Outlook Web Access als ersten erfolgreichen Vertreter des Ajax-Konzepts ein. Dennoch basierten diese sehr frühen Umsetzungen des Konzeptes teilweise noch nicht auf dem XMLHttpRequest-Objekt.

Erste Ajax-Anwendungen

[Bearbeiten | Quelltext bearbeiten]

Später folgten Anwendungen wie Oddposts Webmail-Dienst (heute Yahoo Mail). Im Jahr 2005 war der Begriff Ajax zunehmend durch einige wegweisende Ereignisse in den Medien präsent. Zum einen benutzte Google das asynchrone Kommunikations-Paradigma in einigen bekannten interaktiven Anwendungen wie beispielsweise Google Groups, Google Maps, Google Suggest, Gmail und Google Finance. Der von Garrett verfasste Artikel hat im Ajax-Umfeld inzwischen einen gewissen Bekanntheitsgrad erlangt. Letztlich hat sich die Ajax-Unterstützung der Gecko-Engine in einem Maß entwickelt, welche es ermöglicht, die Ajax-Technologie in vielfältiger Weise einzusetzen.

Standardisierung der Ajax-Technologien

[Bearbeiten | Quelltext bearbeiten]

Neueste Standardisierungsunterfangen des XMLHttpRequest-Objekts seitens des W3Cs und die Gründung der OpenAjax Alliance[5] lassen erkennen, dass die Industrie zukünftig die Ajax-Technologie in ihre Produkte integrieren und somit auf breiter Basis unterstützen wird.

Im Bereich der Standardisierung des Protokolls zwischen Webbrowser und Webserver kann der Kommunikationsstandard SOAP für Ajax-Anwendungen genutzt werden,[6] um so auf einem Server bereits vorhandene Anwendungen, die auf Webservices basieren, wiederzuverwenden.

Vergleich mit herkömmlichen Webanwendungen

[Bearbeiten | Quelltext bearbeiten]
Der Prozessfluss einer traditionellen Webanwendung

Ajax-Anwendungen erwecken den Eindruck, dass sie gänzlich auf dem Computer des Anwenders ausgeführt werden. Der Prozessfluss einer traditionellen Webanwendung wird hingegen durch die zustandslose Natur einer HTTP-Anfrage bestimmt. Das damit unmittelbar verbundene Request-Response-Paradigma führt dazu, dass bei jeder Benutzeraktion eine zugehörige Anfrage (englisch Request) an den Server gerichtet wird. Verzögert sich die erforderliche Antwort (englisch Response) des Servers oder bleibt diese gar aus, so entstehen unweigerlich längere Wartezeiten oder im schlechtesten Fall Brüche im Ablauf der Anwendung. Das geschilderte Szenario macht für den Benutzer einer traditionellen Webanwendung deutlich, dass sie auf mehrere Bereiche verteilt wurde – ein Umstand, der mit der Ajax-Programmiertechnik transparenter und somit auch fehlertoleranter gestaltet werden soll.

Garrett beschreibt zur Abwicklung der Ajax-Anfragen eine „Ajax-Engine“, eine in JavaScript geschriebene Komponente, die die clientseitige Arbeit übernimmt:

„Jede Benutzeraktion, die für gewöhnlich eine HTTP-Anfrage erzeugen würde, erzeugt nun einen JavaScript-Aufruf, der an die Ajax-Engine delegiert wird […] Jede Antwort auf eine Aktion des Nutzers, die keine Verbindung zum Server erfordert, – wie beispielsweise das Validieren von Daten, das Verändern von Daten, welche sich im Speicher befinden, und sogar das Navigieren zwischen einzelnen Elementen der Webseite – all dies kann von der Ajax-Engine bewältigt werden. Benötigt die Ajax-Engine Daten vom Server, um eine bestimmte Aktion erfolgreich durchführen zu können – es kann sich hierbei beispielsweise um das Übertragen von Daten, die verarbeitet werden müssen, um das Nachladen einzelner Bausteine der Benutzeroberfläche oder um das Laden neuer Daten handeln –, führt diese eine asynchrone Anfrage, für gewöhnlich in Form eines XML-Dokuments, an den Server durch. Dabei wurde jedoch die Interaktion des Benutzers mit der Anwendung, wie dies bei gewöhnlichen Webanwendungen der Fall ist, nicht unterbrochen […].“

Garrett

Traditionell übermitteln Webanwendungen Formulare, die zuvor vom Benutzer ausgefüllt wurden, an einen Webserver. Der Webserver antwortet, indem er dem Browser des Nutzers eine entsprechend den zuvor übermittelten Formulardaten neu generierte Webseite schickt. Weil der Webserver bei jeder Anfrage seitens des Nutzers eine neue Webseite erzeugen und übermitteln muss, erscheint die Anwendung dem Benutzer insgesamt als träge und wenig intuitiv, vergleicht man diese mit einer gewöhnlichen Desktop-Anwendung.

Ajax-Anwendungen hingegen sind in der Lage, Anfragen an den Server zu schicken, bei denen nur die Daten angefordert werden, die tatsächlich benötigt werden. Dies geschieht über den Aufruf eines Webservices in einer der oben beschriebenen Varianten (REST, SOAP). Der Aufruf erfolgt als asynchrone Kommunikation, d. h. während die Daten vom Server geladen werden, kann der User weiter mit der Oberfläche interagieren. Sind die Daten fertig geladen, dann wird eine zuvor benannte JavaScript-Funktion aufgerufen, die die Daten in die Webseite einbinden kann.

Im Ergebnis erhält man so eine Benutzeroberfläche, die sehr viel zügiger auf Benutzereingaben reagiert: teilweise weil wesentlich weniger Daten zwischen Webbrowser und Webserver ausgetauscht werden müssen, teilweise weil die Daten asynchron geladen werden. Zudem wird die Webserver-Last reduziert, da schon viele Verarbeitungsschritte clientseitig getätigt werden können.

Man stelle sich eine Webanwendung zur Verwaltung von Fotografien vor. Möchte der Benutzer einem Foto eine Beschreibung oder einen Titel hinzufügen, so muss mit einem traditionellen Programmieransatz die gesamte Seite einschließlich der verkleinerten Foto-Ansichten neu übertragen werden. Mit der Ajax-Technik wird nur der veränderte Bereich der Webseite erneuert. Das Beispiel veranschaulicht, wie es innerhalb der Flickr-Anwendung möglich ist, Titel einzelner Bilder zu verändern.

Im Wikibook „Websiteentwicklung“ (siehe Weblinks) findet sich ein einfaches Beispiel-Programm. Dabei wird die JavaScript-Library prototype als Ajax-Engine verwendet, welche die Details der asynchronen Kommunikation mit dem Webserver abhandelt. Auf der Serverseite wird ein PHP-Skript verwendet, das kein XML, sondern ein HTML-Fragment liefert.

Der Ajax-Request wird folgendermaßen gesendet:

var myAjax = new Ajax.Request(
  "datum.php",
  { method: 'get', onComplete: zeige_datum }
);

Das PHP-Skript liefert ein Stück unformatierten Text, den man als HTML-Fragment auffassen kann:

<?php
  echo "Jetzt ist es " . date("r");
?>

Sobald die Daten fertig zum Browser übertragen wurden, wird die Funktion zeige_datum aufgerufen, die dann die Daten weiter verarbeiten und in die Webseite einbinden kann. Dazu werden in diesem Beispiel nur herkömmliche JavaScript-Methoden und Eigenschaften verwendet.

function zeige_datum( originalRequest ) {
  document.getElementById('output').innerHTML = originalRequest.responseText;
}

Die Ajax-Plattform

[Bearbeiten | Quelltext bearbeiten]
Der Prozessfluss einer Anwendung, wie er sich bei Ajax darstellt

Da Ajax-Anwendungen dem Client-Server-Modell entsprechen, ist sowohl innerhalb des Webbrowsers als auch auf dem entsprechenden Server eine Komponente notwendig, die eine Ajax-basierte Kommunikation ermöglicht.

Client-Plattform

[Bearbeiten | Quelltext bearbeiten]

Die Umsetzung innerhalb des Webbrowsers erfolgt in den meisten Fällen mit der Hilfe einer umfangreichen Funktionalität auf der Basis von JavaScript und dem XMLHttpRequest-Objekt. Dabei lassen sich zwei Kategorien von Plattformen unterscheiden:

Direkte Ajax-Implementierungen: Diese stellen auf dem Client eine API zur direkten Kommunikation von Daten zur Verfügung. Dazu ist auf dem Server neben der initial angezeigten Seite ein weiterer Einstiegspunkt zur Übermittlung der Daten zu realisieren.

Indirekte Ajax-Implementierungen: Dabei werden neue HTML-Fragmente vom Server an den Client gesendet, um die vorhandene Seite zu ergänzen oder Teile davon zu ersetzen. Meist wird dazu auf dem Server die komplette anzuzeigende Seite neu aufgebaut, aber nur die relevanten Unterschiede zum Client übertragen.

Beide Verfahren haben Vor- und Nachteile. Während die direkte Verwendung oft serverseitige Ressourcen schont, vereinfacht die indirekte Variante die Implementierung.

Server-Plattform

[Bearbeiten | Quelltext bearbeiten]

Die eigentliche Programmlogik oder der Prozessfluss der Anwendung ist auf einem Server hinterlegt. Dies geschieht beispielsweise in Form von EJBs, .NET-Komponenten oder aber in Form von Skript-Komponenten, wie sie beispielsweise Bestandteil der Skriptsprache Ruby sind. Das Ajax-Konzept selbst erfordert keine spezifische Technik, mittels derer die serverseitige Programmlogik umgesetzt werden muss. Sowohl der Server als auch die Anwendungslogik werden im Ajax-Kontext als Server-Plattform bezeichnet.

Eine wesentliche Aufgabe des Servers bei Ajax-Applikationen ist die Bereitstellung der im Browser benötigten Komponenten. Da aufgrund der Sicherheitseinstellungen der Browser ein Cross-Site-Scripting nicht erlaubt ist (Same-Origin-Policy), muss der Webserver auch Daten von anderen Servern für den Client zur Verfügung stellen und damit die Funktion eines Proxy-Rechners übernehmen.

Vor-/Nachteile und Kritik

[Bearbeiten | Quelltext bearbeiten]

Kein Neuladen aufgebauter Seiten

[Bearbeiten | Quelltext bearbeiten]

Der größte Vorteil der Ajax-Technologie ist die Tatsache, dass Daten verändert werden können, ohne dass die komplette Webseite vom Webbrowser neu geladen werden muss. Dies erlaubt es Webanwendungen, auf Benutzereingaben schneller zu reagieren. Zudem wird vermieden, dass statische Daten, die sich unter Umständen nicht geändert haben, fortwährend über das Internet übertragen werden müssen.

Kein Browser-Plug-in wird benötigt

[Bearbeiten | Quelltext bearbeiten]

Da die Ajax-Technologien frei zugänglich sind, werden sie unabhängig vom Betriebssystem von den Webbrowsern unterstützt, die auch JavaScript unterstützen. Ein Browser-Plug-in wird nicht benötigt. Dies setzt voraus, dass die JavaScript-Unterstützung nicht deaktiviert wurde – genau das stellt den größten Kritikpunkt und die größten Probleme beim Einsatz dar. Vergleichbare Techniken, wie etwa Adobes Shockwave oder Flash, sind jedoch immer noch mit dem Nachteil behaftet, dass sie proprietär sind, ein Browser-Plug-in benötigen und nur für bestimmte Plattformen verfügbar sind.

Umfangreiche Tests erforderlich

[Bearbeiten | Quelltext bearbeiten]

Wie es auch bei dynamischen HTML-Anwendungen zur Praxis geworden ist, muss auch eine Ajax-basierte Anwendung rigoros getestet werden, um so die Eigenarten der diversen Webbrowser entsprechend behandeln zu können. Im Laufe der Zeit hat sich die Ajax-Technologie weiterentwickelt, was dazu führte, dass für diese nun diverse Programmbibliotheken zur Verfügung stehen. Diese können zu einer weitestgehend fehlerfreien und einfacheren Anwendungsprogrammierung beitragen. Bekannte JavaScript-Bibliotheken sind Dojo Toolkit, jQuery, Prototype, Xajax und Qooxdoo (speziell für Anwendungen, die Desktops ähneln sollen).

Serverseitige Browsererkennung

[Bearbeiten | Quelltext bearbeiten]

Es wurden ebenfalls Techniken entwickelt, wie beispielsweise die von Sun entwickelte JSF-Technologie, Apache Wicket oder die von Microsoft entwickelte Webforms-Technologie, die es ermöglichen, webbasierte Anwendungen zu entwerfen, die einer Desktop-Anwendung nahekommen. Zudem bieten diese die Möglichkeit, auch Benutzer, die einen Webbrowser ohne JavaScript-Unterstützung einsetzen, in geeigneter Weise zu bedienen. Der Browser-Typ des jeweiligen Benutzers wird hierbei serverseitig ermittelt, so dass es möglich ist, diesem nur HTML-Seiten zu schicken, die auch von dessen Webbrowser dargestellt werden können.

Verwendung der „Zurück“-Schaltfläche

[Bearbeiten | Quelltext bearbeiten]

Einer der am häufigsten beklagten Nachteile der Ajax-Technologie ist die Tatsache, dass es schwer möglich ist, die Funktionalität der „Zurück“-Schaltfläche des Browsers zu gewährleisten.[7] Es besteht die Gefahr, dass das Klicken der „Zurück“-Schaltfläche nicht den vorherigen Zustand der Anwendung wiederherstellt, da Browser für gewöhnlich nur statische Seiten in ihrer Historie abspeichern. Das Unterscheiden zwischen einer statischen Seite, die gänzlich in den Cache des Browsers geladen wurde, und einer Seite, die auf dynamische Weise verändert wurde, mag knifflig sein. Grundsätzlich erwartet ein Benutzer, dass ein Klicken der „Zurück“-Schaltfläche die zuletzt getätigte Aktion revidiert. Auch wird oftmals durch das Klicken der „Zurück“-Schaltfläche versucht, eine Seite im Navigationspfad zurückzublättern. Aufgrund der Dynamik, mit welcher viele Ajax-Anwendungen behaftet sind, ist dies nicht immer möglich, da die einzelnen Navigationsschritte des Nutzers technisch nur sehr schwer reproduzierbar sind. Softwareentwickler müssen eine Änderung des Zustandes dem Browser explizit mitteilen. Moderne Browser bieten dafür die History-API an. Eine weit verbreitete Variante ist auch, die URL mit einem Hashtag und einem Client-Pfad zu ergänzen, der den aktuellen Navigationszustand einer Web-Applikation repräsentiert. Insbesondere wird hier der sogenannte Hash-Bang (#!)[8] diskutiert, um URLs zu diesem Zweck zu differenzieren.

Polling-Problem

[Bearbeiten | Quelltext bearbeiten]
Schematische Darstellung des Request-Response-Verhaltens einer herkömmlichen Browser-basierten Anwendung (inkl. Thread-Modell). Pro Anfrage eines Clients wird ein Thread erzeugt. Nachdem die HTTP-Anfrage bearbeitet wurde, werden Ressourcen, die durch die Anfrage belegt wurden, sofort wieder freigegeben.

Da Webserver vor Einführung von Standards wie Websockets nicht in der Lage waren, asynchrone Events an einen Ajax-Client durchzuleiten, wenn sie von diesem nicht angefordert wurden, musste der Ajax-Client seinerseits permanent beim Webserver nachfragen (das eigentliche Polling), ob ein neues Event erzeugt wurde bzw. eine Änderung im Anwendungszustand stattgefunden hat. Dies erzeugt eine völlig andere Auslastung auf einem Webserver, verglichen mit der Last, die von herkömmlichen Anwendungen erzeugt wird.

Um ein andauerndes Polling zu vermeiden, wurde die Technik entwickelt, Poll-Antworten solange zurückzuhalten, bis ein tatsächliches Ereignis oder ein Timeout eintritt. Folglich ist mit einer Ajax-Anwendung im Idealfall serverseitig eine Anfrage verknüpft, die letztlich dazu benutzt werden kann, dem Anwendungs-Client beim Eintreten eines entsprechenden Events eine Antwort zu schicken.

Diese Technik wirft allerdings neue Probleme auf. Bisher war es üblich, pro Anfrage an den Server einen Thread zu erzeugen, dessen Ressource sofort nach dem Abarbeiten der Anfrage wieder freigegeben werden konnten. Bei der beschriebenen Polling-Technik ist diese Freigabe der Ressourcen jedoch nicht möglich. Es bleiben also weiterhin Ressourcen, wie beispielsweise Speicher, belegt. Dieses Problem stellt neue Anforderungen an die Skalierbarkeit einer Ajax-Anwendung. Eine mögliche Lösung dieses Problems ist die Verwendung eines Anwendungsservers, der das Prinzip der Continuation (deutsch „Fortsetzung“) unterstützt.

Ein ähnlich gelagertes Problem ist die Tatsache, dass es bei Webseiten, die dynamisch aktualisiert werden, beinahe unmöglich ist, ein Lesezeichen auf einen ganz bestimmten Zustand einer Webanwendung zu setzen. Auch für dieses Problem wurden zwischenzeitlich Lösungen entwickelt. Meistens wird in diesem Zusammenhang der Anker in der gegenwärtigen URL-Adresse verwendet, der nach der Raute (#) steht. Auf diese Weise ist es möglich, den Prozessfluss einer Anwendung zu verfolgen. Zudem wird es dem Benutzer so ermöglicht, über den genannten URL-Teil einen bestimmten Anwendungszustand wiederherzustellen. Viele Webbrowser ermöglichen es, den Anker durch JavaScript dynamisch zu aktualisieren. Dies ermöglicht es einer Ajax-Anwendung, den Inhalt der dargestellten Webseite parallel zur Verarbeitung zu aktualisieren. Diese Lösungsansätze beheben auch einige der Probleme, die durch den nicht funktionierenden Zurück-Knopf entstehen.

Das MVC-Entwurfsmuster, angewandt auf den gesamten Inhalt eines Browserfensters

Die Latenzzeit, also das zeitliche Intervall zwischen einer HTTP-Anfrage des Browsers und der zugehörigen Server-Antwort, muss bei der Entwicklung einer Ajax-Anwendung berücksichtigt werden. Ohne eine klar ersichtliche Rückmeldung für den Benutzer,[9] vorausschauendes Laden einzelner Anwendungsdaten[10] und einen korrekten Umgang mit dem XMLHttpRequest-Objekt[11] kann sich einem Benutzer der Eindruck aufdrängen, dass die gesamte Anwendung nur zähflüssig auf dessen Aktionen reagiert. Für gewöhnlich ist dies ein Umstand, der sich dem Benutzer nur schwer erschließt.[12] Aus diesem Grund ist es wichtig, sogenannte visuelle Feedbacks wie beispielsweise das Symbol einer Sanduhr zu verwenden, um den Benutzer darauf aufmerksam zu machen, dass momentan gewisse Hintergrundaktivitäten stattfinden oder Daten, etwa Inhalte, geladen werden.

Differenzierung zwischen Konzept und Begriff

[Bearbeiten | Quelltext bearbeiten]

Abgesehen von den technischen Schwierigkeiten, die mit Ajax einhergehen, gab es in der Vergangenheit immer wieder Kritik daran, dass das Unternehmen Adaptive Path, welches den Begriff Ajax ursprünglich geprägt hat, oder andere Unternehmen den Begriff als Marketing-Vehikel benutzen. In diesem Zusammenhang wird vor allem deshalb Kritik geübt, da die Grundlagen von Ajax vor der Prägung des Begriffs entwickelt wurden. Allerdings hat die Prägung des Begriffs auch dazu beigetragen, die Diskussion rund um den Browser als Fat Client neu zu beleben.

Unterstützung des MVC-Architekturmusters

[Bearbeiten | Quelltext bearbeiten]
Das MVC-Entwurfsmuster, angewandt auf einzelne Elemente einer HTML-Seite

Zwar unterstützt eine Ajax-basierte Umgebung nicht per se das MVC-Architekturmuster, jedoch kann dieses sehr einfach umgesetzt werden. Eine Umsetzung kann das gesamte Browser-Fenster als Grundlage für die Präsentationsschicht haben. Auch ermöglicht es Ajax, ein zyklisches bzw. geschachteltes MVC-Modell umzusetzen. In diesem Fall besitzen einzelne Präsentationsschicht-Elemente einer Webseite sowohl einen separaten Controller als auch ein separates Modell. Beide Zusammenhänge sind in den Abbildungen dieses Artikels dargestellt.

Barrierefreies Internet

[Bearbeiten | Quelltext bearbeiten]

Soll die Ajax-Technologie eingesetzt werden, so stellt dies eine Herausforderung dar, wenn die Webanwendung den WAI-Regeln folgen soll. Software-Entwickler müssen aus diesem Grund Alternativen anbieten, wenn eine Webseite beispielsweise auch für sehbehinderte Nutzer mit einem Screenreader zugänglich sein soll. Dies ist notwendig, da die Mehrzahl aller Ajax-Anwendungen für herkömmliche grafische Webbrowser entworfen wurden.

Momentan kommt hierfür oft der sogenannte Hook-Ansatz ins Gespräch, wobei zunächst eine rein statische Anwendung an den Browser geschickt wird und dann bei aktiviertem Javascript alle AJAX Funktionalitäten eingebettet werden.

[Bearbeiten | Quelltext bearbeiten]

Es gibt verschiedene Möglichkeiten, eine Ajax-Anwendung einer Suchmaschine zugänglich zu machen. Die einzelnen Ansätze variieren im Grad der Indizierung, der erreicht werden kann, und der Art, wie dies erreicht wird. Für einige Webseiten, wie beispielsweise die eines Studiengangs einer Universität, ist es notwendig, dass jeder einzelne Bereich durch eine Suchmaschine erfasst werden kann. Eine Seite jedoch, die einen Webmail-Service zur Verfügung stellt, wird dies nicht erforderlich machen. Nachfolgend sind einige Strategien genannt, die es ermöglichen, einen Webauftritt durch eine Suchmaschine indizieren zu lassen:

Lightweight Indexing
An der eigentlichen Webseite werden keine strukturellen Änderungen vorgenommen. Es werden jedoch bereits existierende Elemente wie beispielsweise Meta-Tags oder Überschriften-Elemente für die Indizierung verwendet.
Extra Link Strategy
Zusätzliche Links werden auf der Webseite platziert, denen Suchroboter folgen können, um so den gesamten Webauftritt indizieren zu können. Die zusätzlichen Links sollten allerdings sichtbar sein, auch wenn sie nur für den Suchroboter einer Suchmaschine gedacht sind. Unsichtbare Links sind ein Spezialgebiet moderner Suchmaschinen und sie werden als Täuschungsmanöver angesehen.
Secondary Site Strategy
Eine zweite Webseite wird entworfen. Diese ist für eine Suchmaschine voll zugänglich und bildet entweder die Funktionen der Ajax-Seite nach oder verweist vom entsprechenden Suchwort auf deren Funktionen.

An dieser Stelle sei darauf hingewiesen, dass das Anwenden der Extra Link Strategy und der Secondary Site Strategy von Suchmaschinen möglicherweise als Täuschungsversuch gewertet werden könnte (Cloaking). Die beste Möglichkeit, das zu vermeiden, besteht darin, in der Originalseite ein <meta name="robots" content="noindex" /> einzubauen.

Seit Mai 2014 kann Google Ajax-Webseiten ohne weitere Hilfsmittel indexieren.[13] Obengenannte Strategien sind für eine Indexierung durch Google nicht mehr in vollem Umfang nötig. Experimente von Bartosz Goralewicz deuten allerdings darauf hin, dass Webseiten, die JavaScript intensiv nutzen, mehr Ressourcen von Suchmaschinen-Bots (Crawler Budget) erfordern. Im Vergleich zu reinen HTML-Anwendungen werden bei JS-basierten Websites von Suchmaschinen-Bots insgesamt weniger Seiten gecrawlt.[14]

Status/Verbreitung

[Bearbeiten | Quelltext bearbeiten]

Folgende Webbrowser sind derzeit in der Lage, Ajax-Anwendungen auszuführen. Genannt wird immer nur die erste Software-Version, die es ermöglichte, Ajax-Anwendungen auszuführen. Alle Folgeversionen implizieren dieselbe Unterstützung.

Name Erste Version mit Ajax-Unterstützung Native Unterstützung Unterstützung durch ein Add-on Kommentar
Microsoft Internet Explorer 5.0 7.0 ja (ActiveX-Komponente) Die Version 4.0 unterstützte erstmals XML, jedoch nicht die für Ajax notwendige XMLHttpRequest-API. Diese API wurde später als ActiveX-Komponente realisiert und ist ab Version 7.0 nativer Bestandteil des IEs. Browser, die auf der Internet-Explorer-Technologie aufbauen, sind ebenfalls Ajax-kompatibel.
Mozilla Firefox 1.0 ja Auch alle anderen auf Gecko basierenden Browser.
Opera 8.0 ja
Safari 1.2 ja Apples Browser Safari basiert auf WebKit, einem KHTML-Fork.
Shiira 0.9.1.1 ja Shiira basiert auf WebKit.
Google Chrome 0.2 ja Google Chrome basiert bis Version 27 auf Apples WebKit, ab Version 28 kommt die WebKit-Abspaltung Blink zum Einsatz.
Netscape 7.1 ja
Konqueror 3.2 ja Das HTML-Rendering wird durch KHTML realisiert.
iCab 3.0 Beta ja Ältere Versionen wie beispielsweise die Version für m68k-basierte Computer unterstützen kein Ajax.

Anwendungsbeispiele

[Bearbeiten | Quelltext bearbeiten]

Die nachfolgenden Weblinks referenzieren typische Vertreter einer Anwendung auf Ajax-Basis. Einige haben durch ihre neuartige, intuitiv zu bedienende Benutzeroberfläche einen gewissen Bekanntheitsgrad erlangt. Die Linkliste selbst kann in diesem Zusammenhang ob der aktuellen Vielfalt an Ajax-Anwendungen nur eine beispielhafte Auswahl darstellen und ist bewusst sehr kurz gehalten.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Ajax Patterns – On-Demand Javascript. Ajaxpatterns.org, archiviert vom Original am 22. April 2011; abgerufen am 11. September 2010 (englisch).
  2. Jesse James Garret: Ajax: A New Approach to Web Applications (Memento vom 2. Juli 2008 im Internet Archive)
  3. Remote Scripting. Msdn.microsoft.com, abgerufen am 11. September 2010 (englisch).
  4. Microsoft: XML versions that are included with Microsoft Internet Explorer Knowledge Base Q269238 – Version list for the Microsoft XML parser
  5. Zimbra.com: Stellungnahme des Unternehmens Zimbra, Inc. bezüglich der Open Ajax Initiative. Zimbra.com, archiviert vom Original am 3. August 2009; abgerufen am 11. September 2010 (englisch).
  6. Browserunabhängige Ajax-Engine auf der Basis der Web-Services-Technologie. Mathertel.de, 24. Februar 2007, abgerufen am 11. September 2010.
  7. Jakob Nielsen: Top-10 New Mistakes of Web Design, 1999
  8. Hash URIs. w3.org, 12. Mai 2011, abgerufen am 1. März 2017 (englisch).
  9. Remote Scripting with AJAX, Part 2. Xml.com, abgerufen am 11. September 2010 (englisch).
  10. Jonathan Boutelle: Latency Must Die: Reducing Latency by Preloading Data (Memento vom 29. September 2007 im Internet Archive), 26. August 2004
  11. Ajax Blog – HTML, Javascript and XML coding techniques for Web 2.0 (Memento vom 23. Oktober 2005 im Internet Archive) Async Requests over an Unreliable Network
  12. Marcus Baker: Listen kids, AJAX is not cool (Memento vom 12. Dezember 2005 im Internet Archive) (Archivversion), 3. Juni 2005, abgerufen am 7. März 2014.
  13. Erik Hendriks, Michael Xu, Kazushi Nagayama: Understanding web pages better. 23. Mai 2014.
  14. Advanced Technical SEO – Searchmetrics Summit 2017. searchmetrics – youtube.com, 29. November 2017, abgerufen am 19. Dezember 2017 (englisch).
Wikibooks: Websiteentwicklung: AJAX – Lern- und Lehrmaterialien