Hola:
Simplemente ajax devuelve los datos de forma asincrona, o sea cuando los tiene, y no de forma inmediata, y si no usas la alerta, no das tiempo a conseguir los datos del servidor.
Lo normal es procesar la respuesta ajax en la función que se asocia a readyStateChange.
Saludos