Primero lo esencial, la función de llamada:
Código:
Creamos la llamada:function getXMLHTTPRequest() { var r = false; try { r = new XMLHttpRequest(); } /* Navegadores competentes */ catch(e) { try { r = new ActiveXObject("Msxml2.XMLHTTP"); } /* Algunas versiones de IE */ catch(e) { try { r = new ActiveXObject("Microsoft.XMLHTTP"); } /* Otras versiones de IE */ catch(e) { r = false; } } } return r; }
Código:
Ahora llamada y retorno:var http = getXMLHTTPRequest();
Código:
Y ahora el proceso:function callPage(page) { trash = parseInt(Math.random()*999999999); /* Esto evita el cacheo de páginas */ url = page + "&trash=" + trash; try { http.open("GET", url, true); http.onreadystatechange = tracePage; http.send(null); } catch(e){ alert('Mensaje de error si no puede hacer la peticion.'); } finally{} }
Código:
Uso, en tu página pon algun evento Javascript, por ejemplo un onClick para que haga un: function tracePage() { if (http.readyState == 4) { if (http.status == 200) { var r = http.responseText; /* Se puede recibir en XML o en String (Text) */ document.getElementById("ajax").innerHTML = r; /* Crea un <div id='ajax'></div> para ver el resultado. */ } } }
Código:
miPagina.php:callPage("miPagina.php?saludo=Hola");
Código PHP:
<?php print "Esto es una prueba simple de AJAX. ¡".$_GET["saludo"]." mundo!"; ?>
Código HTML:
<html> <head> <title>AJAX</title> <script type="text/javascript"> function getXMLHTTPRequest() { var r = false; try { r = new XMLHttpRequest(); } /* Navegadores competentes */ catch(e) { try { r = new ActiveXObject("Msxml2.XMLHTTP"); } /* Algunas versiones de IE */ catch(e) { try { r = new ActiveXObject("Microsoft.XMLHTTP"); } /* Otras versiones de IE */ catch(e) { r = false; } } } return r; } var http = getXMLHTTPRequest(); /* http tiene que ser una variable global, y puede llamarse miPeticion o como quieras */ function callPage(page) { trash = parseInt(Math.random()*999999999); /* Esto evita el cacheo de las páginas */ url = page + "&trash=" + trash; try { http.open("GET", url, true); http.onreadystatechange = tracePage; http.send(null); } catch(e){ alert('Mensaje de error si no puede hacer la peticion.'); } finally{} } function tracePage() { if (http.readyState == 4) { if (http.status == 200) { var r = http.responseText; /* Se puede recibir en XML o en String (Text) */ document.getElementById("ajax").innerHTML = r; /* Crea un <div id='ajax'></div> para ver el resultado. */ } } } </script> </head> <body> <a href='#' onclick="javascript:callPage('miPagina.php?saludo=Hola');">Pincha aqui</a> <hr /> <div id='ajax'>Ahora mismo no hay nada aquí.</div> </body> </html>
Tengo una petición que desearía meter en un array, necesito abrir 25 hilos XMLHttpRequest para que cada uno de ellos pida una informacion a un sitio distinto y vayan apareciendo en la pagina los resultados en 25 divs, actualmente lo tengo funcionando en cadena, o en serie, quiere decir que primero lanza el 1 y si no termina no lanza el 2, asi hasta el 25, mi idea es lanzar los 25 de golpe y segun vayan llegando leerlos y actualizar los datos, lo que tengo ahora mismo es esto:
Código:
Sabeis por que no funciona el httpDomain[tld]? No se puede hacer mediante un Array(); ?var httpDomain = new Array(); var tld = 0; /* global */ function domainSearch (domain) { for (tld = 0; tld <= 25; tld++) { httpDomain[tld] = getXMLHTTPRequest(); searchDomain(domain); } } function searchDomain(consult) { try { httpDomain[tld].open("GET", "search.php?domain=" + consult + "&tld=" + tld, true); httpDomain[tld].onreadystatechange = traceDomain; httpDomain[tld].send(null); } catch(e){ alert('Servidor en mantenimiento, intentelo mas tarde.'); } finally {} if ($("div#domain_roll").is(":hidden")) { $("div#domain_roll").show("slow"); } }
Se que una solución rápida y chapucera es hacer algo tipo:
httpDomain1 = getXMLHTTPRequest();
httpDomain2 = getXMLHTTPRequest();
httpDomain3 = getXMLHTTPRequest();
httpDomain4 = getXMLHTTPRequest();
httpDomain5 = getXMLHTTPRequest();
etc... y lo mismo con el tracePage y demás pero como veréis eso es una chapuza catedrática, imagínate que tengo que hacer algún día una petición de 500 Arrays con 500 datos en cada Array, eso es mucho código desperdiciado.
Bueno tengo que irme amigos, muchas gracias por vuestra ayuda y espero que sirva para alguno lo que puse arriba, me sentiría mejor persona