Te explico cómo puedes hacer una función que devuelva la respuesta del servidor cuando haces una llamada Ajax. El error principal que se comete es tratar a las llamadas Ajax como si fueran código síncrono; es decir, que puedes esperar a que se complete la llamada antes de seguir a la siguiente línea de tu programa:

var doAjax = function(){  
    var result;

    $.ajax({
        url: '/my/server/ajax/url',
        success: function( response ){
            result = response;
        }
    });

    return result; // Result es NULO!
};

var serverResponse = doAjax();

console.log( serverResponse ); // Como result era NULO serverResponse TAMBIÉN es NULO  

Si tratas de hacer algo parecido a lo que ves arriba, verás que serverResponse siempre es nulo. Y esto es debido a que no estás teniendo en cuenta que Ajax realiza una operación asíncrona y por lo tanto a la hora de hacer return result; aún no se ha completado la llamada.

Para resolver esto, lo que tienes que hacer es usar una función de callback. Esta es una función que se llamará cuando la operación asíncrona se haya completado, la llamada Ajax, en este caso. El código que necesitas sería algo así:

var doAjax = function( callback ){  
    var result;

    $.ajax({
        url: '/my/server/ajax/url',
        success: function( response ){
            callback( response );
        }
    });

    // Nota que esta función ya no necesita devolver nada. Porque de eso se encarga nuestra función callback
};

doAjax( function( serverResponse ){  
    console.log( serverResponse );
} );

Este es, con mucho, el ejemplo más simple de programación asíncrona. Suscríbete al blog y podrás aprender todas las técnicas necesarias para llegar a controlar los aspectos más complejos de este estilo de programación.

Suscríbete a mi lista de correo

* Campos obligatorios