Tenés problemas con el llamado y los ámbitos (se genera una closure y no la estás resolviendo). Probá así:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>test closures</title>
<html>
<head>
<script>
function Ajax()
{
//--------------------------
// Variables
//--------------------------
this.handler = false; //Objeto
//--------------------------
// Funciones
//--------------------------
this.conectar = function()
{
if(navigator.appName == "Microsoft Internet Explorer") {
try {
this.handler = new ActiveXObject('Msxml2.XMLHTTP');
} catch(e) {
try {
this.handler = new ActiveXObject('Microsoft.XMLHTTP');
} catch(e) {}
}
} else {
this.handler = new XMLHttpRequest();
}
}
var _this=this;//con esto solucionás el tema del scope
this.estados = function()
{
if(_this.handler.readyState == 1) {
document.getElementById('estado').innerHTML = "Cargando...";
} else if (_this.handler.readyState == 4) {
document.getElementById('estado').innerHTML = "Finalizado...";
document.getElementById('carga').innerHTML = _this.handler.responseText;
}
}
this.enviar = function(url, metodo, valores)
{
this.handler.open(metodo, url, true);
this.handler.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
this.handler.onreadystatechange = this.estados;
if(metodo.toUpperCase() == 'POST') {
this.handler.send(valores);
} else {
this.handler.send(null);
}
}
}
window.onload = function()
{
pagina = new Ajax();
pagina.conectar();
pagina.enviar('prueba.php', 'GET');
}
</script>
</head>
<body>
<div id="estado">En espera</div>
<div id="carga">Vacio</div>
</body>
</html>
Edito: ups, se me adelantó GatorV, pero bueno, sin resolver la closure tampoco te habría funcionado ;)