Foros del Web » Programando para Internet » Javascript »

AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

Estas en el tema de AJAX, el debugger me dice que no puede "leer el valor de ReadyState" en el foro de Javascript en Foros del Web. B uenas caballeros! Tengo un problema al ejecutar una función de javascriot que forma aprte de la respuesta XMLHttpRequest. El codigo que me da error ...
  #1 (permalink)  
Antiguo 31/10/2012, 11:41
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Información AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

Buenas caballeros!

Tengo un problema al ejecutar una función de javascriot que forma aprte de la respuesta XMLHttpRequest.


El codigo que me da error es el siguiente :

Código:


Código Javascript:
Ver original
  1. if(this.xmlhttp.readyState == 4) {
  2. if(this.xmlhttp.status == 200) {
  3.  ---
  4. ---
  5. --- ([I]sentencias a ejecutar[/I])

El debuguer me tira error diciendo : Uncaught TypeError: Cannot read property 'readyState' of undefined


Ps. this.xmlhttp actual como variable global para guardar el valor de la instancia XMLHttpRequest.


¿que he hecho mal o que no he hecho?
  #2 (permalink)  
Antiguo 31/10/2012, 13:06
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

Estás mostrando solo una función , supongo que has creado una instancia correcta del ajax, para luego


Código Javascript:
Ver original
  1. // funcion de respuesta
  2. peticion_http.onreadystatechange = muestra_datos;
  3. // Realizar peticion HTTP
  4. xmlhttp.open('GET', url, true);
  5. xmlhttp.send(null);
  6.  
  7.  
  8. function muestra_datos() {
  9. if(xmlhttp.readyState == 4) {
  10. if(xmlhttp.status == 200) {
  11. alert(xmlhttp.responseText);
  12. }
  13. }
  14. }

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 31/10/2012, 23:45
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Información Respuesta: AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

Si, solo que en mi funcion no es responseText, si no responseXML, aunque el error sigue siendo el mismo (o al menos ami en el debuggder me pone lo mismo),he revisado intensamente mi codigo en busca de fallos de sintaxis, yo al menos no he visto ninguno, te pongo todo directamente :


Código Javascript:
Ver original
  1. function loadXMLhttpRequest(){
  2.     var xmlhttp;
  3.     if (window.XMLHttpRequest)
  4.          {
  5.          this.xmlhttp=new XMLHttpRequest();
  6.           }
  7.          
  8.     }
  9.  
  10. function LlamadaAjaxValidarNombre() {
  11. var nombre = document.getElementById('inputNick').value;
  12. var url = "ValidarNombre.php?nombre=" + nombre;
  13. this.xmlhttp.open("GET", url, true);
  14. this.xmlhttp.onreadystatechange = respuestaValidarNombre;
  15. this.xmlhttp.send(null);
  16. }
  17.  
  18.  
  19. function respuestaValidarNombre() {
  20.  
  21.  
  22. if(this.xmlhttp.readyState == 4) {
  23. if(this.xmlhttp.status == 200) {
  24.  
  25.     var nodoRespuesta = this.xmlhttp.responseXML.getElementsByTagName("respuesta")[0];
  26.     var textoRespuesta = nodoSaludo.childNodes[0].nodeValue;
  27.        
  28.             document.getElementById('respuestaphp').innerHTML = (textoRespuesta);
  29.            
  30.            
  31.  
  32.  
  33.         }
  34.     }
  35. }
  #4 (permalink)  
Antiguo 31/10/2012, 23:57
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

Código Javascript:
Ver original
  1. var xmlhttp;
  2. function loadXMLhttpRequest(){
  3.  
  4. * * if (window.XMLHttpRequest)
  5. * * * * *{
  6. * * * * *xmlhttp=new XMLHttpRequest();
  7. * * * * * }
  8. * * * * *
  9. * * }
  10. *
  11. function LlamadaAjaxValidarNombre() {
  12. var nombre = document.getElementById('inputNick').value;
  13. var url = "ValidarNombre.php?nombre=" + nombre;
  14. xmlhttp.open("GET", url, true);
  15. xmlhttp.onreadystatechange = respuestaValidarNombre;
  16. xmlhttp.send(null);
  17. }
  18. *
  19. *
  20. function respuestaValidarNombre() {
  21. *
  22. *
  23. if(xmlhttp.readyState == 4) {
  24. if(xmlhttp.status == 200) {
  25. *
  26. * * var nodoRespuesta = xmlhttp.responseXML.getElementsByTagName("respuesta")[0];
  27. * * var textoRespuesta = nodoSaludo.childNodes[0].nodeValue;
  28. * * * *
  29. * * * * * * document.getElementById('respuestaphp').innerHTML = (textoRespuesta);
  30. * * * * * *
  31. * * * * * *
  32. *
  33. *
  34. * * * * }
  35. * * }
  36. }

lo que pasa es que primero que nada, cuando llamas a la funcion loadXMLhttpRequest, esta te crea una variable temporal, adentro de esta función, pero cuando termina esta variable desaparece. por eso la cree afuera de la función, y no tiene this. , por que no se refiere a una variable de la función, luego, en las otras funciones, cuando llamaba a esa variable, le quite el this. por que se refiere a una variable global, o podria haber antepuesto window. , ya que es la variable padre de las variables globales.

Saludos :D y que tengas un buen dia :D
  #5 (permalink)  
Antiguo 01/11/2012, 04:44
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Respuesta: AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

muchas gracias!
  #6 (permalink)  
Antiguo 01/11/2012, 04:54
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 10 meses
Puntos: 30
Respuesta: AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

Me rectifico, chwc , la solución que has aportado no soluciona el problema, me sigue dando el mismo error en el debugger.


pero curiosamente , al ejecutar en el debujer, la siguiente linea de codigo , me sale :




teniendo en cuenta que el código es el mismo (código original) :

Código Javascript:
Ver original
  1. function loadXMLhttpRequest(){
  2.     var xmlhttp;
  3.     if (window.XMLHttpRequest)
  4.          {
  5.          this.xmlhttp=new XMLHttpRequest();
  6.           }
  7.          
  8.     }
  9.  
  10. function LlamadaAjaxValidarNombre() {
  11. var nombre = document.getElementById('inputNick').value;
  12. var url = "ValidarNombre.php?nombre=" + nombre;
  13. this.xmlhttp.open("GET", url, true);
  14. this.xmlhttp.onreadystatechange = respuestaValidarNombre;
  15. this.xmlhttp.send(null);
  16. }
  17.  
  18.  
  19. function respuestaValidarNombre() {
  20.  
  21.  
  22. if(this.xmlhttp.readyState == 4) {
  23. if(this.xmlhttp.status == 200) {
  24.  
  25.     var nodoRespuesta = this.xmlhttp.responseXML.getElementsByTagName("respuesta")[0];
  26.     var textoRespuesta = nodoSaludo.childNodes[0].nodeValue;
  27.        
  28.             document.getElementById('respuestaphp').innerHTML = (textoRespuesta);
  29.            
  30.  
  31.            
  32.  
  33.  
  34.         }
  35.     }
  36. }



Con la "solucion" que dio chwc, es decir sin hacer un puntero a la variable (this.xmlhttp) dejandola como una variable simple (xmlhttp) el debuger me dice esto :


Última edición por Albuss; 01/11/2012 a las 05:05
  #7 (permalink)  
Antiguo 01/11/2012, 07:36
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: AJAX, el debugger me dice que no puede "leer el valor de ReadyState"

A ver, aparentemente estás leyendo un xml
Y no es necesario que utilices 3 funciones


Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9.  
  10. // creas el objeto Ajax
  11. function ajaxFunction() {
  12. var xmlHttp;
  13. try {
  14. xmlHttp=new XMLHttpRequest();
  15. return xmlHttp;
  16. } catch (e) {
  17. try {
  18. xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  19. return xmlHttp;
  20. } catch (e) {
  21. try {
  22. xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  23. return xmlHttp;
  24. } catch (e) {
  25. alert("Tu navegador no soporta AJAX!");
  26. return false;
  27. }}}
  28. }
  29.  
  30.  
  31. function LlamadaAjaxValidarNombre() {
  32.     // llamas a ajax
  33. var ajax;
  34. ajax = ajaxFunction();
  35. var url = "validarnombre.xml";
  36. ajax.open("GET", url, true);
  37. ajax.onreadystatechange=function(){
  38.  
  39. if(ajax.readyState == 4) {
  40.     if(ajax.status == 200) {
  41.     var nodoRespuesta = ajax.responseXML.getElementsByTagName("title")[0];
  42.     var textoRespuesta = nodoRespuesta.childNodes[0].nodeValue;
  43.     document.getElementById('respuestaphp').innerHTML = textoRespuesta;
  44. }
  45. }
  46.  
  47.  
  48. }
  49.      
  50. ajax.send(null);
  51. }
  52.  
  53. //]]>
  54.  
  55. </head>
  56. <button onclick="LlamadaAjaxValidarNombre();">xxx</button>
  57. <div id="respuestaphp">
  58. </div>
  59. </body>
  60. </html>

Luego aqui
var textoRespuesta = nodoSaludo.childNodes[0].nodeValue;
nodoSaludo no está definido, habrás querido poner nodoRespuesta

usé este xml


Código XML:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- Edited by XMLSpy® -->
  3. <catalog>
  4.     <cd>
  5.         <title>Empire Burlesque</title>
  6.         <artist>Bob Dylan</artist>
  7.         <country>USA</country>
  8.         <company>Columbia</company>
  9.         <price>10.90</price>
  10.         <year>1985</year>
  11.     </cd>
  12. </catalog>



Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: ajax, readystate, xmlhttprequest
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 10:25.