AJAX is een voetbalclub, je kan er mee schoonmaken, het is een figuur uit de Griekse mythologie én het is een afkorting van Asynchronous JavaScript and XML. Het zal duidelijk zijn dat dit artikel over de laatste betekenis gaat. AJAX is een verzamelnaam voor een aantal technologieën waarmee de browser van de bezoeker met de server kan communiceren, zonder dat er een pagina refresh nodig is.
Omdat voorbeelden vaak meer spreken, noem ik er een paar:
Google heeft trouwens veel AJAX applicaties ontwikkeld en zo een belangrijke bijdrage geleverd aan de populariteit van AJAX. Denk hierbij aan Google Maps, GMail en Google Suggest.
AJAX is in feite niet één techniek, maar een verzamelnaam voor meerdere technieken die interactie tussen de server en een browser bewerkstelligen. Dit opvragen van informatie op de server gebeurt asynchroon, wat betekent dat het niet ná elkaar gebeurt, maar tegelijk. Vroeger was het bijvoorbeeld zo dat je bij een registratieformulier deze stappen ondernam:
Als we een AJAX techniek zouden toepassen op datzelfde formulier, zou het stappenplan zoiets zijn:
Het zal duidelijk zijn dat een AJAX techniek als deze de gebruiksvriendelijkheid ten goede komt.
Hét geheim achter AJAX is het XMLHttpRequest. Dit is een Application Programming Interface (API) waarmee bijvoorbeeld Javascript data kan versturen naar de server via het http-protocol. Uiteraard kan er ook data worden terug gestuurd. Hoewel het protocol is ontwikkeld door Microsoft, wordt het tegenwoordig door (bijna) alle moderne browsers ondersteund. Naast het XMLHttpRequest, maakt AJAX ook gebruik van:
Centraal in AJAX applicaties staan de event handlers. Als je bijvoorbeeld wil checken of een gebruikersnaam welke wordt ingevoerd al bestaat in de database, zul je nadat je het invoerveld verlaat een check moeten uitvoeren op de inhoud van het veld. In dit geval is dit het event onblur(), wat getriggered wordt als je het bewuste veld verlaat, bijvoorbeeld doordat je via Tab naar het volgende veld gaat. Hieronder volgt een beknopte lijst van de belangrijkste events:
Genoeg over de theorie voor nu. Het is niet de bedoeling in dit artikel een al te geniaal werkend voorbeeld te geven. Binnen een week zal er een tweede artikel komen waarin we een case study gaan langslopen. In die case study komt dus het nuttige werkende voorbeeld, maar een paar algemene opmerkingen over het schrijven van een AJAX applicatie zullen we hier wel maken.
Allereerste moeten we zeggen dat niet elke browser op dezelfde manier met het XMLHttpRequest om gaat. Hieronder volgt dan ook een code die er voor zorgt dat een browser die juiste manier van het aanroepen van het protocol gebruikt.
var xmlhttp,alerted
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
} catch (e) {
alert("Je browser moet Microsofts XML parsers beschikbaar hebben")
}
}
@else
alert("Je browser moet minimaal JavaScript 5 ondersteunen")
xmlhttp=false
alerted=true
@end @*/
if (!xmlhttp && !alerted) {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
alert("Je hebt een browser nodig die het XMLHttpRequest object ondersteunt.")
}
}
Allereerst wordt er gekeken of je browser JavaScript 5 ondersteunt. Als dat niet zo is, wordt de error ?Je browser moet minimaal JavaScript 5 ondersteunen? als output gegeven. Als de browser wel JavaScript 5 of hoger ondersteunt, wordt d.m.v. een try {} catch (e) {} methode gekeken of achtereenvolgens de Msxml2.XMLHTTP, de Microsoft.XMLHTTP of de XMLHttpRequest worden ondersteund. Dit zijn diverse protocollen, met aflopende leeftijd. De eerste die gevonden wordt, wordt gebruikt om een object aan te maken. Op deze manier wordt er een zo jong mogelijk protocol gebruikt.
Via een JavaScript functie kunnen we vervolgens een PHP-pagina opvragen die onze applicatie van data uit de database voorziet. Zo?n functie kan er als volgt uit zien:
function checkData(){
if (xmlhttp) {
xmlhttp.open("GET", "check.php?naam="+document.getElementById("naam").value, true);
xmlhttp.onreadystatechange=verwerkInput
xmlhttp.send(null)
}
}
function verwerkInput(){
if (xmlhttp.readyState===4){
// Doe iets met de data
alert(
}
}
Wat je hier allereerst ziet is een controle op de aanwezigheid van het xmlhttp-object. Indien deze niet false is, zou XMLHttpRequest moeten werken en kun je via xmlhttp.open() een PHP-script opvragen. Je ziet hier dat een parameter naam wordt meegegeven welke bepaald is door document.getElementById(?naam?).value. In HTML dien je dit form-element dan ook aan te geven via bijvoorbeeld:
Als er een onreadystatechange is, roepen we de functie verwerkInput () aan. De functie verwerkInput gebruikt een variabele xmlhttp.readyState. Deze variabele kan een paar waarden aannemen:
Op het moment dat de data helemaal geladen is (oftewel als de readyState 4 is), kunnen we iets doen met de data zoals deze naar het scherm schrijven. Tenslotte geven we aan dat we klaar zijn met onze AJAX-request met xmlhttp.send(null).
Het PHP-script (of ASP, JSP of wat dan ook) wat wordt aangeroepen krijgt in dit geval als parameter $_GET['naam'] binnen. Deze variabele kan gebruikt worden om op te zoeken in de database of om er iets totaal anders mee te doen. Als het bijvoorbeeld belangrijk is dat de naam minimaal 3 karakters lang is, zou dit de PHP-code kunnen zijn:
if (strlen($_POST['naam']) >= 3){
echo “De naam is WEL minimaal 3 karakters lang.”;
}else{
echo “De naam is NIET minimaal 3 karakters lang.”;
}
?>
Op het moment dat de gebruiker een naam invult, moet gekeken worden of de naam lang genoeg is. Dit zouden we na elke toetsaanslag kunnen bepalen, dus de applicatie zou bij elk onkeyup-event de AJAX applicatie moeten oproepen. Het HTML-formulier wordt dan iets als hieronder:
Tot zo ver dit eerste artikel over AJAX. Eind deze week zal er een tweede artikel volgen met een iets intelligentere en minder irritante applicatie.
Wil je een stapje verder? Lees dan eens het artikel over AJAX, een object georiënteerde xml parser.