Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks JS (http://www.forosdelweb.com/f127/)
-   -   Ayuda con Ajax (http://www.forosdelweb.com/f127/ayuda-con-ajax-890209/)

gcrlink 27/02/2011 12:45

Ayuda con Ajax
 
Hola...

Recurro a ustedes porque son los expertos en el tema... :-)

Siguiendo lo aprendido por medio de dos tutoriales, construí el siguiente ajax:

Código Javascript:
Ver original
  1. function llamarasincrono (url, id_contenedor)
  2.  {
  3.      var pagina_requerida = false;
  4.      
  5.      if (window.XMLHttpRequest) // Para identificar navegador Mozilla FF o otros navegadores que no sean IE
  6.      {
  7.          pagina_requerida = new XMLHttpRequest();
  8.      }
  9.      else if (window.ActiveXObject) // Para identificar versiones de IE
  10.      {
  11.          var versionesObj = new Array('Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP');
  12.          
  13.          for (var i = 0; i < versionesObj.length; i++) // for para recorrer el Array de versiones
  14.          {
  15.              try
  16.              {
  17.                  return new ActiveObject(versionesObj[i]);
  18.              }
  19.              catch(e)
  20.              {
  21.              }
  22.          }
  23.      }
  24.      else
  25.      return false;
  26.      pagina_requerida.onreadystatechange = function()
  27.      {
  28.          cargarpagina(pagina_requerida,id_contenedor);
  29.      }
  30.      pagina_requerida.open("GET",url,true);
  31.      pagina_requerida.send(null);
  32.  }
  33.  
  34. function cargarpagina (pagina_requerida, id_contenedor)
  35. {
  36.     switch (pagina_requerida.readyState)
  37.     {
  38.         case 0: document.getElementById(id_contenedor).innerHTML = "Sin iniciar la carga de información";
  39.         break;
  40.        
  41.         case 1: document.getElementById(id_contenedor).innerHTML = "cargando la información";
  42.         break;
  43.        
  44.         case 2: document.getElementById(id_contenedor).innerHTML = "Información cargada";
  45.         break;
  46.        
  47.         case 3: document.getElementById(id_contenedor).innerHTML = "Puede Interactuar con los demás objetos de la página";
  48.         break;
  49.        
  50.         case 4: document.getElementById(id_contenedor).innerHTML = "Carga de información completada";
  51.         break;
  52.     }
  53.         document.getElementById(id_contenedor).innerHTML = pagina_requerida.responseText;
  54. }

Esta programación me funciona muy bien en FF y Safari. Pero en Chorme, Opera e IE, no me funciona. En cuanto a IE me aparece la ventana de error en la línea: pagina_requerida.open("GET",url,true); Pero la verdad, con base en lo que sé del tema, no veo el error.

¿Cuál será la razón? Por favor necesito ayuda. :stress:

gcrlink 27/02/2011 16:08

Respuesta: Ayuda con Ajax
 
Saludos...

Pues trabjando un poco con el código y estudiando un poco más sobre ajax ya conseguí :-) que el código publicado arriba me funcione para IE, y pues también sigue funcionando con FF y Safari. Lo único que tuve que hacer fue invertir el orden interno de la condición window.XMLHttpRequest por el window.ActiveXObject.

Para explicarme mejor les presento como me ha quedado el código hasta ahora para que lo comparen con el código anteriormente publicado.

Código Javascript:
Ver original
  1. function llamarasincrono (url,id_contenedor)
  2.  {
  3.      var pagina_requerida = false;
  4.      
  5.      if (window.ActiveXObject) // Para identificar versiones de IE
  6.      {
  7.           var versionesObj = new Array('Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP');
  8.          
  9.          for (var i = 0; i < versionesObj.length; i++) // for para recorrer el Array de versiones
  10.          {
  11.              try
  12.              {
  13.                  pagina_requerida = new ActiveXObject(versionesObj[i]);
  14.              }
  15.              catch(e)
  16.              {
  17.              }
  18.          }
  19.      }
  20.      else if (window.XMLHttpRequest) // Para identificar navegador Mozilla FF o otros navegadores que no sean IE
  21.      {
  22.          pagina_requerida = new XMLHttpRequest();
  23.      }
  24.      else
  25.      return false;
  26.      pagina_requerida.onreadystatechange = function()
  27.      {
  28.          cargarpagina(pagina_requerida,id_contenedor);
  29.      }
  30.      pagina_requerida.open("GET",url,true);
  31.      pagina_requerida.send(null);
  32.  }
  33.  
  34.  
  35. function cargarpagina (pagina_requerida,id_contenedor)
  36. {
  37.     switch (pagina_requerida.readyState)
  38.     {
  39.         case 0: document.getElementById(id_contenedor).innerHTML = "Sin iniciar la carga de información";
  40.         break;
  41.        
  42.         case 1: document.getElementById(id_contenedor).innerHTML = "cargando la información";
  43.         break;
  44.        
  45.         case 2: document.getElementById(id_contenedor).innerHTML = "Información cargada";
  46.         break;
  47.        
  48.         case 3: document.getElementById(id_contenedor).innerHTML = "Puede Interactuar con los demás objetos de la página";
  49.         break;
  50.        
  51.         case 4: document.getElementById(id_contenedor).innerHTML = "Carga de información completada";
  52.         break;
  53.     }
  54.         document.getElementById(id_contenedor).innerHTML = pagina_requerida.responseText;
  55. }

Pero todavía no consigo que me funcione para CHROME y OPERA. :neurotico

POR FAVOR AYUDAAAAA....

gcrlink 28/02/2011 15:40

Respuesta: Ayuda con Ajax
 
Saludos...

:aplauso::aplauso::-):-)

Disculpen pero soy un tonto de primera...:ojotes:

El script ajax que contruí funciona bien en todos los navegadores (FF, Chrome, Opera, Safari, IE).

Lo que pasaba y que no tomé en cuenta es que en el caso de Chrome y Opera necesariamente tiene que abrirse la página desde un servidor local o desde un servidor web autoriazado. De lo contrario el Ajax no funcionará en estos dos navegadores.

Pero estoy contento :-) porque aprendí algo nuevo y mi código funciona.

Perdonen la molestia que les di a todos.

El código quedó de la siguiente forma:

Código Javascript:
Ver original
  1. function llamarasincrono (url,id_contenedor)
  2.  {
  3.      var pagina_requerida = false;
  4.      
  5.      if (window.ActiveXObject) // Para identificar versiones de IE
  6.      {
  7.           var versionesObj = new Array('Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0','Msxml2.XMLHTTP','Microsoft.XMLHTTP');
  8.          
  9.          for (var i = 0; i < versionesObj.length; i++) // for para recorrer el Array de versiones
  10.          {
  11.              try
  12.              {
  13.                  pagina_requerida = new ActiveXObject(versionesObj[i]);
  14.              }
  15.              catch(e)
  16.              {
  17.              }
  18.          }
  19.      }
  20.      else if (window.XMLHttpRequest) // Para identificar navegador Mozilla FF o otros navegadores que no sean IE
  21.      {
  22.          pagina_requerida = new XMLHttpRequest();
  23.      }
  24.      else{
  25.      return pagina_requerida;
  26.      }
  27.      pagina_requerida.onreadystatechange = function()
  28.      {
  29.          cargarpagina(pagina_requerida,id_contenedor);
  30.      }
  31.      pagina_requerida.open("GET",url,true);
  32.      pagina_requerida.send(null);
  33.  }
  34.  
  35.  
  36. function cargarpagina (pagina_requerida,id_contenedor)
  37. {
  38.     switch (pagina_requerida.readyState)
  39.     {
  40.         case 0: document.getElementById(id_contenedor).innerHTML = "Sin iniciar la carga de información";
  41.         break;
  42.        
  43.         case 1: document.getElementById(id_contenedor).innerHTML = "cargando la información";
  44.         break;
  45.        
  46.         case 2: document.getElementById(id_contenedor).innerHTML = "Información cargada";
  47.         break;
  48.        
  49.         case 3: document.getElementById(id_contenedor).innerHTML = "Puede Interactuar con los demás objetos de la página";
  50.         break;
  51.        
  52.         case 4: document.getElementById(id_contenedor).innerHTML = "Carga de información completada";
  53.         break;
  54.     }
  55.         document.getElementById(id_contenedor).innerHTML = pagina_requerida.responseText;
  56. }

Espero que el mismo les ayude en algo para sus pruebas y construcciones Ajax.


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2024, Jelsoft Enterprises Ltd.