Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problema empezando con Ajax y Mamp

18 de mayo de 2015

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

#1

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

18 mayo 2015, 8:37