Buenas a todos....
Al grano: hice este tutorial: http://www.cristalab.com/tutoriales/tutorial-de-ajax-c162l/
Es mas, varias veces lo use y lo he tocado algun poquito para algunas cosas ..... pero lo que me esta pasado es lo siguiente: en el php que pide el ajax hauna funcion mail() y algunas consultas a bases de datos y eso ... y el mail me llega 2 veces, las consultas me las hace 2 veces .... como que me ejecuta todo 2 veces ...
lo estoy tratando de usar para hacer un "Recuperar clave" .. el php tiene que cambiar la clave y enviarme la clave nueva por mail... pero me la cambia dos veces y me envia dos mails....
Co codigo que estoy usando es el siguiente:

Código Javascript :

// Documento JavaScript
// Esta función cargará las paginas
function llamarasincrono (url, id_contenedor)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest)
    {
        // Si es Mozilla, Safari etc
        pagina_requerida = new XMLHttpRequest ();
    } else if (window.ActiveXObject)
    {
        // pero si es IE
        try 
        {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            // en caso que sea una versión antigua
            try
            {
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        // función de respuesta
        cargarpagina (pagina_requerida, id_contenedor);
    }
   /****************************************************************************************************************************************************/
   //ESTO ES UN PARCHERIO ::: DEBERIA ARREGLARLO PERO NO SE COMO
   ///si lo que busco es un salon le agrego a la url el ID enviado
   if(url == "datosSalon.php")
   {
      url = url+"?ID="+document.getElementById ('ID_salones').value;
   }
   if(url == "recuperarClave.php")
   {
      url = url+"?email="+document.getElementById ('recuperarClave').value;
   }
   /****************************************************************************************************************************************************/
    pagina_requerida.open ('GET', url, true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}
// todo es correcto y ha llegado el momento de poner la información requerida
// en su sitio en la pagina xhtml
function cargarpagina (pagina_requerida, id_contenedor)
{
    if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
    document.getElementById (id_contenedor).innerHTML = pagina_requerida.responseText;
}


Se que el codigo es mejorable.... pero no cacho mucho de esto..... igualmente no entiendo porque me lo ejecuta dos veces....
Si hace falta el php avisen y lo agrego.
Ojala alguien entienda algo
Saludos