Archivo

Error 404 al leer archivo JSON desde navegador o js

Os ha ocurrido alguna vez que al leer un archivo JSON desde un navegador o desde un Javascript, aparece el error 404 como que ese archivo no se encuentra en el servidor, pero en realidad si que está alojado en el servidor.

Pues este error ocurre mucho en los servidores Windows, porque el servidor de Windows no tiene habilitada la extensión JSON en la configuración MIME Types y por lo cuál, no puede abrir un archivo con extensión .json. Tan sólo hay que habilitarla y ya funcionaría.

Para habilitar la extensión JSON en la configuración MIME Types de un servidor Windows, hay que realizar lo siguiente:

1. Abrir IIS Manager, y con el botón derecho abrir las propiedades del IIS Server.
2. Añadir la extensión ‘json’ MIME Type:

2.1. Hacemos doble click sobre el icono “MIME Types”.
2.2. Después pulsar  en “Add MIME Type” (debajo de la sección Acciones del lado derecho)
2.3. En la ventana “Add MIME Type” añadir:

File name extension: .json
MIME type: application/x-javascript

2.4. Pulsar en OK, y deberías ver el MIME Type .json añadido en la lista de MIME Types.

3.  Añadir el Script Map Handelr para el MIME Type “json”:

3.1. Hacemos doble click en el icono de “Handler Mappings”
3.2. Pulsar en “Add Script Map…”  (debajo de la sección Acciones del lado derecho)
3.3. En la ventana “Add Script Map” añadir:

Request path: *.json
Executable: C:\Windows\System32\inetsrv\asp.dll
Name: JSON

3.4. Pulsar en OK ( Aparecerá una ventana de alerta con el mensaje: Do you want to allow this ISAPI extension?…etc ) Pulsa en Yes. Deberías ver la extensión .json añadida a la lista de Handler Mappings.

Otra posible solución, un poco más “apaño”, es que cómo desde un Javascript o desde el mismo navegador no se puede acceder al JSON, pero desde PHP si (lo podemos comprobar ejecutando la función phpinfo() para saber si PHP lo tiene habilitado), lo que se puede hacer es crear un PHP que sea el que lea el JSON y lo devuelva como cadena de texto. Después desde el Javascript donde no podemos leer directamente el JSON, lo que hacemos es llamar al PHP que hemos creado, y metemos el resultado en una variable. Ahora sí que podemos leer el JSON desde Javascript.

Opción 1. Esto sería un ejemplo del código que se usa para leer el JSON desde Javascript directamente (necesitaremos habilitar la extension en el servidor):

$.getJSON(‘ejemplo.json’, function(contentFile){
//lo que queramos hacer con el JSON
});

Opción 2. Si no conseguimos habilitar la extensión JSON en el servidor y por lo cuál al ejecutar el código de la opción1 nos da el error 404, la opción 2 es hacerlo pero a través de un PHP.

Esto sería el código de ejemplo del PHP getJSON.php, que se encargaría de leer el archivo JSON e imprimirlo:

$jsonfile = file_get_contents(ejemplo.json);
$arrayjson = json_decode($jsonfile, true);
print_r($arrayjson);

Código de ejemplo del Javascript que lee el JSON a través de un PHP:

var jsonFile = “getJSON.php”; //el php que nos devuelve el contenido del JSON en formato texto

$.getJSON( jsonFile, {
format: “json”
}).done(function( contentFile ) {
//lo que queramos hacer con el JSON
});

Esta última opción sólo la usaría en el caso crítico de que no consiga habilitar la extensión JSON en el servidor Windows, ya que es posible que no tengamos acceso a la configuración del servidor y necesitemos una solución rápida, pero no es lo más recomendado.