Yo tengo por un lado las funciones que hacen la conexion y eso:
  
Código:
 function inicializa_xhr() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest(); 
  } else if (window.ActiveXObject) {
    return new ActiveXObject("Microsoft.XMLHTTP"); 
  } 
}
var READY_STATE_COMPLETE = 4;
var peticion_http = null;
 
function realizarSolicitudAjax(rutaFichero,parametros,funcionAEjecutar) {
  peticion_http = inicializa_xhr();
  if(peticion_http) {
  
    peticion_http.onreadystatechange = function(){ procesarRespuestaAjax(funcionAEjecutar);};
    peticion_http.open("POST", rutaFichero, true);
    peticion_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    peticion_http.send(parametros+"&nocache="+Math.random());
  }
}
 
function procesarRespuestaAjax(funcionAEjecutar) {
  if(peticion_http.readyState == READY_STATE_COMPLETE) {
  
    if (peticion_http.status == 200) {
	
		funcionAEjecutar();
    }
  }
}
  Y luego desde javascript llamo a realizarSolicitudAjax con la funcion que quiero que procese la respuesta de la petición