Ajax (ohjelmointi)

Ajax (akronyymi sanoista Asynchronous JavaScript And XML) on joukko web-sovelluskehityksen tekniikoita, joiden avulla web-sovelluksista voi tehdä vuorovaikutteisempia. Alkuperäisessä merkityksessään AJAX:lla on alun perin viitattu tekniikkaan, jossa verkkosivulla JavaScriptillä asynkronisesti tehtävistä HTTP-pyynnöistä palautetaan XML-merkkausta, mutta nykyään käytetään laajasti yksinkertaisempaa JSON-merkkausta. Nykyisin Ajax-tekniikoilla viitataan yleisesti samankaltaiseen toimintatapaan: Ajaxissa selainohjelma vaihtaa pieniä määriä dataa palvelimen kanssa taustalla niin, ettei koko verkkosivua tarvitse ladata uudelleen joka kerta käyttäjän tehdessä muutoksen. Tekniikan päämääränä on siis lisätä verkkopalvelun vuorovaikutteisuutta, nopeutta ja käytettävyyttä.
Ajax koostuu seuraavien tekniikoiden yhdistelmästä: 
DHTML:n, LAMP:n ja SPA:n tapaan Ajax ei ole itsenäinen teknologia, vaan termi tarkoittaa useiden teknologioiden samanaikaista käyttöä.
Historia.
1990-luvun alkupuoliskolla suurin osa internet-sivuista perustui muuttumattomiin HTML-sivuihin. Käyttäjä siirtyi valintansa mukaan sivulta toiselle. Käyttäjän jokainen toiminto latasi siis koko sivun uudelleen ja lähetti kaiken sivulla löytyvän tiedon palvelimelle, vaikka siiryttäessä vain osa tästä tiedosta muuttui. Tämä toimintatapa kuormitti palvelinta, mistä seurasi internet-sivujen tehokkuuden ja käytettävyyden huononemista. Ongelmaan toi helpotusta, kun JavaScript 1.0 -ohjelmointikieli julkaistiin vuonna 1995 ja vuorovaikutteisten verkkosivujen kehittäminen alkoi. 
Vuonna 1996 Internet Explorer -selain laukaisi uuden asynkronisen IFrame-objektin, ja kaksi vuotta myöhemmin Microsoft kehitteli konseptin, johon XMLHttpRequest-komentosarjaobjekti perustuu. XMLHttpRequest, joka tunnetaan myös nimellä XMLHTTP, on API, jonka objektin metodit välittävät tietoa verkkoselaimen ja -palvelimen välillä. Windowsin kehittelemän XMLHTTP ActiveX:n toiminnallisuudet toteutettiin myöhemmin myös muissa verkkoselaimissa, kuten Mozilla Firefoxissa, Safarissa, Operassa ja Google Chromessa XMLHttpRequest JavaScript-objektina. Microsoft otti XMLHttpRequest-objektin käyttöön ensimmäisen kerran Internet Explorer 7 -mallissa. ActiveX-versio on edelleen käytössä Internet Explorer -selaimessa, muttei enää Microsoft Edge -selaimessa.
Verkkosivujen taustalla ajettujen HTTP-pyyntöjen ja asynkronisten menetelmien mahdollistamat edut jäivät melko huomaamattomiksi, kunnes Ajaxia alettiin hyödyntämään suurissa verkkosovelluksissa, kuten Googlen Gmail- ja Google Maps -sovelluksissa vuosina 2004 ja 2005. Näissä Googlen toteutuksissa oli mahdollista muun muassa hakea tietoa uusista sähköposteista ja selata karttoja lataamatta koko sivua uudelleen.
Termiä Ajax käytti ensimmäisen kerran Jesse James Garrett helmikuussa 2005 uutta menetelmää käsittelevässä esseessään Ajax: A New Approach to Web Applications kuvaillen Ajaxia keskeisenä muutoksena verkon mahdollisuuksiin. Huhtikuussa 2006 World Wide Webin standardeja ylläpitävä ja kehittävä taho World Wide Web Consortium julkaisi XMLHttpRequest-objektille ensimmäisen luonnoksen objektin määritelmistä, joiden tarkoituksena on luoda virallinen verkkostandardi lisäten verkon yhtenäisyyttä. XMLHttpRequest-objektin viimeisin luonnos julkaistiin 6.10.2016 ja on jatkuvasti avoin päivityksille.
Teknologiat.
Termi Ajax on tullut edustamaan laajaa joukkoa web-teknologioita, joita voidaan käyttää toteuttamaan web-sovelluksia, jotka kommunikoivat palvelimien kanssa taustalla häiritsemättä sivun nykyistä tilaa. Ajaxiin muun muassa sisältyvät seuraavanlaiset teknologiat:
Ajaxin syntymisen jälkeen Ajax-sovelluksissa käytetyissä teknologioissa ja Ajax-termin määritelmässä on kuitenkin tapahtunut useita kehityksiä. XML ei ole enää pakollinen tiedonvaihdossa ja siksi XSLT ei ole enää välttämätön datan käsittelyyn. JavaScript Object Notation (JSON) on usein käytetty vaihtoehtoinen formaatti tiedonvaihdossa, vaikka myös muita formaatteja, kuten esimuotoiltua HTML:ää tai pelkkää tekstiä, voidaan käyttää. Useat suositut JavaScript-kirjastot, mukaan lukien jQuery, sisältävät abstraktioita, jotka auttavat Ajax-pyyntöjen toteuttamisessa.
Lisäksi muita nykyään yleisesti käytettyjä teknologioita ja lähestymistapoja Ajax-sovelluksissa ovat:
Näiden uusien teknologioiden ja menetelmien myötä Ajax-sovellusten kehitys on kehittynyt huomattavasti mahdollistaen entistä monipuolisempia ja tehokkaampia web-sovelluksia.
Ajaxia tukevat selaimet.
Ajaxin käyttö vaatii selaimelta tukea XMLHttpRequest DOM-ohjelmointirajapinnalle. Yleisimmissä työpöytäselaimissa on olemassa tälle tuki seuraavasti: 
Yllä oleva lista on yleispiirteinen. Yksityiskohtainen tuki on rakennettu kunkin selaimen tukemien ominaisuuksien pohjalle.
Esimerkit.
JavaScript esimerkki
Esimerkki yksinkertaisesta AJAX pyynnöstä, joka lähtee GET-kutsulla
// Alusta HTTP pyyntö.
let xhr = new XMLHttpRequest();
// määrittele pyyntö
xhr.open('GET', 'url.json');
// Seurataan vastauksen tilannetta, kunnes se toteutuu tai epäonnistuu.
xhr.onreadystatechange = function () {
 const DONE = 4; // readyState 4 tarkoittaa, että pyyntö onnistui.
 const OK = 200; // status 200 on onnistunut palautus.
 if (xhr.readyState === DONE) {
 if (xhr.status === OK) {
 console.log(xhr.responseText);
 } else {
 console.log('Error: ' + xhr.status); // Virhetilanne.
Fetch esimerkki
Fetch on JavaScript yleisellä käytöllä oleva XMLHttpRequest:n korvaaja. Fetch suoraviivaistaa web-pyyntöjen tekoa.
fetch('send-ajax-data.php')
 .then(data =&gt; console.log(data))
 .catch (error =&gt; console.log('Error:' + error));