Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks JS (http://www.forosdelweb.com/f127/)
-   -   ajax bien menos en ie7 (http://www.forosdelweb.com/f127/ajax-bien-menos-ie7-558953/)

rockobop 20/02/2008 17:33

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;
}


ZiTAL 21/02/2008 02:23

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

rockobop 21/02/2008 05:36

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

ZiTAL 21/02/2008 06:06

Re: ajax bien menos en ie7
 
Cuando llames al objeto ajax desde una funcion llamalo asi:
Código:

function ...
 {
  var ajax=new ajaxFunction();
  ...
 }


rockobop 21/02/2008 06:43

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

Panino5001 21/02/2008 07:45

Re: ajax bien menos en ie7
 
Cita:

Iniciado por rockobop (Mensaje 2293899)
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 (Mensaje 2293899)
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.

rockobop 21/02/2008 07:51

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

Panino5001 21/02/2008 07:53

Re: ajax bien menos en ie7
 
Disculpá, será el stress, pero sigo sin ver un new delante de nuevoAjax();

rockobop 21/02/2008 08:03

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

rockobop 21/02/2008 08:06

Re: ajax bien menos en ie7
 
Cita:

Iniciado por Panino5001 (Mensaje 2293974)
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

Panino5001 21/02/2008 08:11

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 :-)

Panino5001 21/02/2008 08:12

Re: ajax bien menos en ie7
 
Sería aquí:
Código PHP:

if (ajax.readyState==4)
            {
                
selectDestino.parentNode.innerHTML=ajax.responseText;
                
ajax.onreadystatechange=null;
            } 


ZiTAL 21/02/2008 08:22

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.

MaBoRaK 22/02/2008 10:51

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.


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

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