Foros del Web » Programando para Internet » Javascript » Frameworks JS »

ajax bien menos en ie7

Estas en el tema de ajax bien menos en ie7 en el foro de Frameworks JS en Foros del Web. hola a todos tengo la siguiente funcion para cargar mis ajax's Código HTML: function ajaxFunction() { var xmlHttp; try { // Firefox, Opera 8.0+, Safari ...
  #1 (permalink)  
Antiguo 20/02/2008, 17:33
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 20 años
Puntos: 1
ajax bien menos en ie7

hola a todos tengo la siguiente funcion para cargar mis ajax's

Código HTML:
function ajaxFunction()
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Tu buscador no soporta AJAX!");
      return false;
      }
    }
  }
return xmlHttp
}
me funciona perfecto todo, y en casi todos los navegadores menos en ie7, alguien sabe por q puede ser esto ????

tb habia intentado de esta otra manera pero no funciona, da el mismo error

Código HTML:
function nuevoAjax()
{ 
    
    var xmlhttp=false;
    try
    {
        
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            // Creacion del objet AJAX para IE
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(E)
        {
            if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
        }
    }
    return xmlhttp; 
}
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #2 (permalink)  
Antiguo 21/02/2008, 02:23
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 8 meses
Puntos: 62
Re: ajax bien menos en ie7

Que error te da?

personalmente uso esto:
Código:
function ajaxFunction()
  { var xmlHttp;
  try { xmlHttp=new XMLHttpRequest();return xmlHttp; }
  catch (e) { try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");return xmlHttp; }
  catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");return xmlHttp; }
  catch (e) { alert("Your browser does not support AJAX!");return false; }
  }}}
por lo que veo es lo mismo y a mi me funciona en IE7, tal vez el problema sea de otra cosa
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 21/02/2008, 05:36
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 20 años
Puntos: 1
Re: ajax bien menos en ie7

no me devuelve ningun error

utilizo este ajax en selects dinamicos, la primera vez me funciona fantástico, pero si quiero cambiar los valores de los selects no me funciona el ultimo y eso solo me pasa con ie7, en los demas navegadores funciona bien


saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #4 (permalink)  
Antiguo 21/02/2008, 06:06
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 8 meses
Puntos: 62
Re: ajax bien menos en ie7

Cuando llames al objeto ajax desde una funcion llamalo asi:
Código:
function ...
 {
  var ajax=new ajaxFunction();
  ...
 }
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #5 (permalink)  
Antiguo 21/02/2008, 06:43
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 20 años
Puntos: 1
Re: ajax bien menos en ie7

llamo de esa manera a mi ajax

mira te copio mi cod completo del scritp ajax

Código HTML:
function nuevoAjax()
{ 
    /* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
    lo que se puede copiar tal como esta aqui */
    var xmlhttp=false;
    try
    {
        // Creacion del objeto AJAX para navegadores no IE
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            // Creacion del objet AJAX para IE
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(E)
        {
            if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
        }
    }
    return xmlhttp; 
}

// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var listadoSelects=new Array();
listadoSelects[0]="departamento";
listadoSelects[1]="materias";
listadoSelects[2]="gestiones";
listadoSelects[3]="programas";

function buscarEnArray(array, dato)
{
    // Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
    var x=0;
    while(array[x])
    {
        if(array[x]==dato) return x;
        x++;
    }
    return null;
}

function cargaContenido(idSelectOrigen)
{
    // Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
    var posicionSelectDestino=buscarEnArray(listadoSelects, idSelectOrigen)+1;
    
        // Obtengo el select que el usuario modifico
    var selectOrigen=document.getElementById(idSelectOrigen);
    
        // Obtengo la opcion que el usuario selecciono
        var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
    
        // Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
    if(opcionSeleccionada==0)
    {
        var x=posicionSelectDestino, selectActual=null;
        
                // Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
        while(listadoSelects[x])
        {
            selectActual=document.getElementById(listadoSelects[x]);
            selectActual.length=0;
            
            var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Selecciona........";
            selectActual.appendChild(nuevaOpcion);    selectActual.disabled=true;
            x++;
        }
    }
    // Compruebo que el select modificado no sea el ultimo de la cadena
    else if(idSelectOrigen!=listadoSelects[listadoSelects.length-1])
    {
        // Obtengo el elemento del select que debo cargar
        var idSelectDestino=listadoSelects[posicionSelectDestino];
        var selectDestino=document.getElementById(idSelectDestino);
        
                // Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
        var ajax=nuevoAjax();
        ajax.open("GET", "proceso.jsp?select="+idSelectDestino+"&opcion="+opcionSeleccionada, true);
        ajax.onreadystatechange=function() 
        { 
            if (ajax.readyState==1)
            {
                // Mientras carga elimino la opcion "Selecciona ..." y pongo una que dice "Cargando..."
                selectDestino.length=0;
                var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
                selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;    
            }
            if (ajax.readyState==4)
            {
                selectDestino.parentNode.innerHTML=ajax.responseText;
            } 
        }
        ajax.send(null);
    }
}
gracias por todo

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #6 (permalink)  
Antiguo 21/02/2008, 07:45
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: ajax bien menos en ie7

Cita:
Iniciado por rockobop Ver Mensaje
llamo de esa manera a mi ajax
Y dónde está el operador new que menciona Zitalk en la llamada a la función ajax?
Cita:
Iniciado por rockobop Ver Mensaje
var ajax=nuevoAjax();
Zitalk te está diciendo que debería ser así:
Código PHP:
var ajax=new nuevoAjax(); 
En algunos casos, dependiendo de la estructura, ese operador es necesario.
También conviene poner a null onreadystatechange al finalizar el intercambio, para evitar fugas de memoria.

Última edición por Panino5001; 21/02/2008 a las 07:50
  #7 (permalink)  
Antiguo 21/02/2008, 07:51
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 20 años
Puntos: 1
Re: ajax bien menos en ie7

justo aqui, en este pedazo mas resumido del codigo en la linea 7

Código PHP:
// Obtengo el elemento del select que debo cargar
        
var idSelectDestino=listadoSelects[posicionSelectDestino];
        var 
selectDestino=document.getElementById(idSelectDestino);
        
                
// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
        
var ajax=nuevoAjax();
        
ajax.open("GET""proceso.jsp?select="+idSelectDestino+"&opcion="+opcionSeleccionadatrue);
        
ajax.onreadystatechange=function() 
        { 
            if (
ajax.readyState==1)
            {
                
// Mientras carga elimino la opcion "Selecciona ..." y pongo una que dice "Cargando..."
                
selectDestino.length=0;
                var 
nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0nuevaOpcion.innerHTML="Cargando...";
                
selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;    
            }
            if (
ajax.readyState==4)
            {
                
selectDestino.parentNode.innerHTML=ajax.responseText;
            } 
        }
        
ajax.send(null);
    }

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #8 (permalink)  
Antiguo 21/02/2008, 07:53
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: ajax bien menos en ie7

Disculpá, será el stress, pero sigo sin ver un new delante de nuevoAjax();
  #9 (permalink)  
Antiguo 21/02/2008, 08:03
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 20 años
Puntos: 1
Re: ajax bien menos en ie7

perdon si no tenia el new, el q esta mal de la vista soy soy, pero ahora lo cambien y sigue dando el mismo problema

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #10 (permalink)  
Antiguo 21/02/2008, 08:06
Avatar de rockobop  
Fecha de Ingreso: octubre-2004
Ubicación: Bolivia
Mensajes: 826
Antigüedad: 20 años
Puntos: 1
Re: ajax bien menos en ie7

Cita:
Iniciado por Panino5001 Ver Mensaje
Y dónde está el operador new que menciona Zitalk en la llamada a la función ajax?

En algunos casos, dependiendo de la estructura, ese operador es necesario.
También conviene poner a null onreadystatechange al finalizar el intercambio, para evitar fugas de memoria.
sobre lo del onreadystatechange, en mi codigo en q parte tendria q añadir esto, espero no ser molesto

saludos
__________________
:pensando: Tú no necesitas un libro mágico, un gurú carismático, rituales primitivos. Sólo necesitas tus cinco sentidos.:adios:
  #11 (permalink)  
Antiguo 21/02/2008, 08:11
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: ajax bien menos en ie7

Bueno, pero ya podés estar seguro de que el problema no es Ajax. Ya sabés que tiene que estar o en Javascript (quizá una variable se llame igual que el id de un elemento y Explorer las confunde o alguna de esas cosas maravillosas que hace ese navegador para mantener nuestro ingenio al día) o en el servidor. Por lo menos, un lugar menos donde buscar
  #12 (permalink)  
Antiguo 21/02/2008, 08:12
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Re: ajax bien menos en ie7

Sería aquí:
Código PHP:
if (ajax.readyState==4)
            {
                
selectDestino.parentNode.innerHTML=ajax.responseText;
                
ajax.onreadystatechange=null;
            } 
  #13 (permalink)  
Antiguo 21/02/2008, 08:22
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 8 meses
Puntos: 62
Re: ajax bien menos en ie7

o utilizar el depurador por excelencia del javascript:

alert

a poner alert's a cascoporro ;) ya veras que facil encuentras donde te hace/no te hace la cosa en cuestion.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #14 (permalink)  
Antiguo 22/02/2008, 10:51
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: ajax bien menos en ie7

loading............



Hola hermano Boliviano.

Bueno si dices que no no te salta error alguno, puede que tu proceso AJAX no se est'e inicializando o bien, que TU NO VEAS el resultado.

Esto puede ser por algun error DOM

Por ejemplo.

Código PHP:
                selectDestino.length=0;
                var 
nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0nuevaOpcion.innerHTML="Cargando...";
                
selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true
el objeto Option, no tiene la propiedad innerHTML, pero s'i la propiedad 'text' y deber'ia ser.

Código PHP:
selectDestino.length=0;
selectDestino.options[selectDestino.length] = new Option('Cargando....',0);
selectDestino.disabled=true
Supongo que con

selectDestino.length=0; <== tratas de eliminar los elementos del Select. Pero es igual INCORRECTO.

O nose.. tantas cosas :D Y como dice, tendras que depurarlo manualmente.


Código PHP:
        ajax.onreadystatechange=function() 
        { 
            if (
ajax.readyState==1)
            {
alert('Iniciado');
                
// Mientras carga elimino la opcion "Selecciona ..." y pongo una que dice "Cargando..."
                
selectDestino.length=0;
                var 
nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0nuevaOpcion.innerHTML="Cargando...";
                
selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;    
            }
            if (
ajax.readyState==4)
            {
alert('Terminado con el resultado:'+ajax.responseText);
                
selectDestino.parentNode.innerHTML=ajax.responseText;
            } 
        } 
Si ambos alert se disparan con los resultados esperados, entonces tienes errores DOM y f.....ng.. IE nunca te los va a reportar.


connection closed.
__________________

Maborak Technologies
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 13:57.