Buenas,
La verdad es que estoy empezando con Ajax y tengo un problema al que no le consigo dar solución y me estoy volviendo loco. Estoy utilizando el primer ejemplo sencillo de Ajax de librosweb en el que a través de un archivo .html (pongo el código a continuación) se hace una llamada al servidor solicitando de vuelta el archivo "hola.txt", lanzando un "alert" del texto que se incluya en ese archivo.
Mi servidor corre en Mamp y el asunto es que si pongo tanto el archivo .html com el archivo "hola.txt" en la carpeta htdocs todo funciona correctamente. La ruta del archivo .html que apunta al archivo "hola.text" es la siguiente peticion_http.open('GET', 'holamundo.txt', true)
. Sin embargo, si no ubico el archivo .html dentro de htdocs y apunto al archivo "hola.text" de la siguiente manera no funciona peticion_http.open('GET', 'http://localhost:8888/holamundo.txt', true)
o incluso ubicándolo en la misma carpeta, utilizando esa ruta con localhost no me funciona, por lo que algo falla con esa ruta.
Agradecería si alguien me pudiera ayudar:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Hola Mundo con AJAX</title> <script type="text/javascript"> function descargaArchivo() { // Obtener la instancia del objeto XMLHttpRequest if(window.XMLHttpRequest) { peticion_http = new XMLHttpRequest(); } else if(window.ActiveXObject) { peticion_http = new ActiveXObject("Microsoft.XMLHTTP"); } // Preparar la funcion de respuesta peticion_http.onreadystatechange = muestraContenido; // Realizar peticion HTTP peticion_http.open('GET', 'http://localhost:8888/holamundo.txt', true); peticion_http.send(null); function muestraContenido() { if(peticion_http.readyState == 4) { if(peticion_http.status == 200) { alert(peticion_http.responseText); } } } } window.onload = descargaArchivo; </script> </head> <body></body> </html>
Respuestas
Lo que te pasa es normal cuando realizas peticiones Ajax "a mano" usando código JavaScript puro. El motivo del error es que no se permiten peticiones Ajax desde una página a menos que el recurso solicitado esté en el mismo dominio, puerto y protocolo.
Puedes leer este artículo para entender bien el problema y descubrir las posibles soluciones. En cualquier caso, mi recomendación sería que usaras los métodos Ajax de jQuery con los que vas a poder hacer peticiones sin problemas y siempre te va a funcionar bien. Lo de hacer peticiones Ajax a mano puede estar bien para aprender a bajo nivel lo que está sucediendo, pero en la práctica siempre se usa alguna librería tipo jQuery.
@javiereguiluz