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==undefined) q="";
if(!sinBR) q+="<br/>";
elDIV.innerHTML = q;
for(var a=0; elDIV.childNodes.length>a; a++) {
document.body.appendChild( elDIV.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=0, tiempotres = [];
for(var i=0, primarg, segunarg; i<compos.length; i++){
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.