Ver Mensaje Individual
  #8 (permalink)  
Antiguo 26/11/2007, 09:03
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
Re: SetInterval y SetTimeOut, no crean el delay esperado

No lo sé a ciencia cierta, pero opino que en el evento onreadystatechange utilizas la variable ajax y eso es lo que falla. No estoy seguro si dentro de esa función se podría usar this para referenciar al objeto de mejor manera o quizás la función nuevoAjax() esté también con variables globales y eso crea un problema. También veo que te sobran muchos var en el código dentro del bucle, y que la variable i es bastante importante ponerle var para que no se mezcle con otras i en otras funciones (quizá sea eso¿?).

También has puesto en el bucle <= 16, teniendo en cuenta que el número de elementos del array compos es 16, el último i intentará compos[16], lo que dará undefined... hay bastantes cosas bailando en el código.

Cuando te pasen cosas de este tipo, lo mejor es empezar con un ejemplo básico:
Código PHP:

// escribir en el documento una ristra (x)html fuera de tiempo de ejecución.
function e(q,sinBR) {
    var 
elDIV document.createElement("DIV");
    if(
q==undefinedq="";
    if(!
sinBRq+="<br/>";
    
elDIV.innerHTML q;
    for(var 
a=0elDIV.childNodes.length>aa++) {
        
document.body.appendChildelDIV.childNodes[a].cloneNode(true) );
    }
}
// document.getElementById abreviado
function $(x) { return document.getElementById(x); }




function 
crear(){
    var 
compos=new Array("Gabinete","Tarjeta Madre","Procesador","Memorias RAM","Disco Duro","Monitor","Tarjeta de Video","Unidad Optica","Segunda Unidad Optica","Tarjeta de Sonido","Bocinas","Disquet","Tarjetas de Memoria","Raton y Teclado","Sistema Operativo","Energia");
    var 
tiemp=0tiempotres = [];
    for(var 
i=0primargsegunargi<compos.lengthi++){
        
primarg=compos[i]+",1";
        
segunarg=compos[i];
        
tiempotres[i]=setTimeout("cambiar('"+primarg+"','"+segunarg+"', '')",tiemp) ;
        
tiemp+=2000;
    }
}


function 
cambiar(nombre,ide,tipo){
    
/*
    var ajax=nuevoAjax();
    ajax.open("GET", "recibir.php?nombre="+nombre+"&ide="+ide+"&tipo="+ tipo+"", true);
    ajax.onreadystatechange = function() {
        if (ajax.readyState==1){
            // Mientras carga elimino la opcion "Elige pais" y pongo una que dice "Cargando"
            document.getElementById(ide).innerHTML="<center><i mg src=loading.gif /></center>";
        }
        if (ajax.readyState==4) {
            document.getElementById(ide).innerHTML=ajax.respon seText;
        }
    }
    ajax.send(null);
    */
    
e("Se ha llamado a cambiar('"+nombre+"', '"+ide+"', '"+tipo+"')");
}



crear(); 
Y a partir de ahí vas creando el objeto ajax, pruebas, luego haces el open(), vuelves a probar, luego estableces el manejador del evento, pruebas de nuevo... hay que crear poquito a poco que si no detectar el error es imposible (más aún cuando se van superponiendo errores y eso es imposible de controlar).


Un saludo, y con calma.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.