Foros del Web » Programando para Internet » Javascript »

No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un objeto

Estas en el tema de No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un objeto en el foro de Javascript en Foros del Web. Hola amigos, A ver si me dan una ayudita con este error de javascript. La pagina lo que hace es que al darle click a ...
  #1 (permalink)  
Antiguo 24/02/2010, 16:53
Avatar de saymon  
Fecha de Ingreso: septiembre-2003
Ubicación: Panama
Mensajes: 318
Antigüedad: 21 años, 2 meses
Puntos: 0
No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un objeto

Hola amigos,

A ver si me dan una ayudita con este error de javascript.
La pagina lo que hace es que al darle click a una imagen este sin salir de la pagina ni refrescar inserta unos datos en la base de datos y la imagen a la cual le dimos click la cambia por otra imagen.
La pagina me funciona bien, pero en IE me manda el siguiente erro y no se porque, este error lo repite varias veces, aqui se lo cocolo:

Mensaje: 'obj.readyState' es nulo o no es un objeto
Línea: 52
Carácter: 5
Código: 0
URI: http://www.misitio.com/test/1.php


Alguno me puede ayudar a arreglar el code para que no me mande este error ?

Aqui les dejo la pagina completita y la linea 52 de error es esta:
"if (obj.readyState == 4) {" MUCHAS gracias de antemano:

Código HTML:
<html>
<head>
<script type="text/javascript">
var obj;

function ProcessXML(url,szDivID)
{
//INICIA codigo para insertar los datos en la BD 
  if (window.XMLHttpRequest) {
    // obtain new object
    obj = new XMLHttpRequest();
    // set the callback function
    obj.onreadystatechange = processChange;
    // we will do a GET with the url; "true" for asynch
    obj.open("GET", url, true);
    // null for GET with native object
    obj.send(null);
  // IE/Windows ActiveX object
  } else if (window.ActiveXObject) {
    obj = new ActiveXObject("Microsoft.XMLHTTP");
    if (obj) {
      obj.onreadystatechange = processChange;
      obj.open("GET", url, true);
      // don't send null for ActiveX
      obj.send();
    }
  } else {
    alert("Your browser does not support AJAX");
  }
//FINALIZA codigo para insertar los datos en la BD
 
// INICIA codigo para cambiar la imagen del div
    if(document.layers)    //NN4+
    {
	document.layers[szDivID].innerHTML= "<img src='/images/deletefav.gif' border='0' title='Remove Favorite' height='10' width='10' />";
    }
    else if(document.getElementById)      //gecko(NN6) + IE 5+
    {
        var obj = document.getElementById(szDivID);
	obj.innerHTML = "<img src='/images/deletefav.gif' border='0' title='Remove Favorite' height='10' width='10' />";
    }
    else if(document.all)       // IE 4
    {
	document.all[szDivID].innerHTML = "<img src='/images/deletefav.gif' border='0' title='Remove Favorite' height='10' width='10' />";
    }
 // FINALIZA codigo para cambiar la imagen del div

}

function processChange() {
    // 4 means the response has been returned and ready to be processed
    if (obj.readyState == 4) {
        // 200 means "OK"
        if (obj.status == 200) {
                     alert("Listo Insertado"); 
            // process whatever has been sent back here:
        // anything else means a problem
        } else {
            alert("There was a problem in the returned data:\n");
        }
    }
}

</script>
<head>
<body>

<div id="12345" style="float:left; margin-right:4px;">
<a href ="javascript:ProcessXML('insertar.php?nombre=thalia&cancion=pielmorena&ruta=archivos/thalia','12345')" onMouseOver="this.style.cursor='pointer'"><img src="/images/fav.gif" border="0" title="Add to Favorite" height="10" width="10" /></a>
</div>

</body>
</html> 
  #2 (permalink)  
Antiguo 24/02/2010, 17:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un obj

a mi juicio, creo que es mejor que nos muestres un ejemplo simplificado en un documento online. analizando el codigo no veo como se te genera el error en iexplorer, pues el codigo esta bien escrito.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 24/02/2010, 17:33
Avatar de saymon  
Fecha de Ingreso: septiembre-2003
Ubicación: Panama
Mensajes: 318
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un obj

Gracias por la respuesta, aqui les muestro como funciona http://www.latinpa.com/test/
  #4 (permalink)  
Antiguo 24/02/2010, 18:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un obj

pues realmente no solo tienes problema en iexplorer, en firefox la consola tambien me avisa de errores. ya sé por que es el problema pero tecnicamente no comprendo porque sucede. el problema es con la variable obj. mira el siguiente ejemplo,
Código:
obj = null;
(function(){
obj = {}; // se asigna un objeto a la variable global;
var obj = 1; // se crea una variable local a la funcion;
})()
¿cual es el resultado de la variable global obj? a mi me llevo a pensar que es un objeto pero el interprete javascript no lo ve asi. se debe a que luego estas creando una variable local con el mismo nombre. personalmente a mi me parece curioso, mira el siguiente codigo el cual es parecido al anterior con la excepcion que consideramos la variable global como una propiedad de window.
Código:
obj = null;
(function(){
obj = {};
alert(self.obj); // muestra null pese a la linea anterior;
var obj; // se crea variable local sin valor;
alert(self.obj);
})()
obj;
en conclusion, creo que es porque javascript realiza alguna reservacion para las variables locales antes de interpretar la funcion en si. en resumen, cambiale el nombre a la variable local o viceversa. u otra solucion es cambiar el nombre obj de la funcion processChange por this.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 24/02/2010, 18:17
Avatar de saymon  
Fecha de Ingreso: septiembre-2003
Ubicación: Panama
Mensajes: 318
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: No se porque obtengo este mensaje: 'obj.readyState' es nulo o no es un obj

Gracias Zerokilled, la explicacion estuvo perfecta y la respuesta tambien, ya me funciona sin error, mira http://www.latinpa.com/test/

:)

Etiquetas: mensaje, nulo, objeto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:18.