Sin tener el código para probarlo me da la sensación que el 1º alert hasta que presionas ACEPTAR le da tiempo suficiente a tu objeto de recibir la respuesta, tal como indicas en el primer post.
¿Has probado mostrar tu alert (mi_hidden.value); en el momento que tu propiedad readyState es == a 4?
Código PHP:
if(ajax.readyState==4)
{
// coloco el value del hidden con lo que corresponda
// obtengo el value del hidden, ahora si debe funcionar
}
De esta forma lo que podrías hacer es que al llegar el ajax.readyState==4 poner una variable bandera=true. Luego en tu main con setIntervall llamas periodicamente a una función que compruebe el estado de tu bandera; si es true continua ejecutando y limpia el intervalo sino, sigue verificando.
Otra cosa que puedes hacer es trabajar con el objeto AJAX de forma sincrónica enviando su 3º parámetro en false.
Cualquier cosa nos comentas, saludos.