Uso Ajax in maniera molto grezza.
Istanzio l'oggetto XMLHttpRequest con una funzione del tipo
codice:
function newXMLHttpRequest(){		
        if(typeof XMLHttpRequest != 'undefined'){
            return new XMLHttpRequest();
        }
        
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
            	alert("Il tuo browser non è abilitato al corretto uso del sito");
            }
        }
        
        return false;
    }
e gestisco la risposta in maniera altrettanto grezza

codice:
function handleResponse(req, XMLHandler){ 
		return function(){ 
		
			if(req.readyState == 4){ 
			
				if (req.status == 200){ 
				
					XMLHandler(req.responseText); 
				}else{ 
					alert("Errore HTTP: " + req.status); 
				} 
			} 
		} 
	}
Su un OnClick mi tocca chiamare due funzioni che dialogano con due script PHP molto semplici.
Quello che fanno è una query secca che ritorna un numero.
Ognuna di queste due funzioni deve aggiornare un campo col solito innerHTML.

Un esempio di funzione è questo

codice:
function updateNeutri(infID,cittaID){	
		//Creo un nuovo oggetto XMLHTTPRequest		
		var req = newXMLHttpRequest();												
		
		//Invio la richiesta
		req.open("POST", "./influenze_neutri.php?infID="+infID+"&cittaID="+cittaID, true);
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		
		//Invio i dati POST
		req.send();				
		
		//Gestore dell'evoluzione dello stato dell'oggetto req
		req.onreadystatechange = handleResponseComplex(req, updateValoreNeutri, infID);
	}
	
	function updateValoreNeutri(result,suffix){ 												
		document.getElementById('valore_neutro_' + suffix).innerHTML = result;					
	}
Accede però che a volte il secondo script non viene eseguito o forse la risposta non viene gestita, insomma il secondo campo che dovrebbe aggiornarsi non si aggiorna.

Le due funzioni sono chiamate entrambe sull'onClick, separate da ;

Come posso avere la certezza che, a meno di problemi di rete, anche la seconda funzione faccia il suo sporco lavoro?