Restons hype, après avoir parlé de l'ignoble incrémentation de version du web (cf billet précédent), parlons du phénomène (relativement) à l'origine de toute cette folie, j'ai nommé le bienheureux XMLHttpRequest.

Voilà une approche toute bête à AJAX, un peu repompé sur le MDC (pour la création de l'objet XMLHttpRequest) et sur GreaseMonkey (pour le concept):

function xmlHttpRequest(conf) {
 
	var xmlhttp = false;
 
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
	
	    xmlhttp = new XMLHttpRequest();
	
	} else if (window.ActiveXObject) { // IE
	
		try {
 
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 
		} catch (e) {
 
			try {
 
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 
			} catch (e) {}
 
		}
 
	}
	
	if (!xmlhttp) { alert('can not create a xmlhttprequest object instance'); return false; }
	
	xmlhttp.onreadystatechange = function() { 
 
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
 
			conf.callback(xmlhttp);
 
		} 	
 
	}
  
	xmlhttp.open(conf.method, conf.url);
	xmlhttp.send(null);
  
}

Concrètement, dans la pratique, ça donne un truc comme ça:

function refreshMonths(year) {
 
	xmlHttpRequest({
		'method': 'POST',
		'url':	'<?php echo BASE_URI; ?>/xmlhttp/getmonths.php?year='+year,
		'callback': function(xmlhttp) {
 
			getE('s-month').innerHTML = xmlhttp.responseText;
 
		}
	});
 
}

Bon bien sur, quelque part on a forcément un truc genre:

function getE(id) { return document.getElementById(id); }

(ça c'est pompé sur dotclear).