¿Por qué no se encuentra mi archivo json?

85

Tengo un archivo json en una carpeta de contenido dentro de mi proyecto asp.net:

<projectName>
    \Content
        NBCCJr.json

... y el código para acceder a él:

$.getJSON('~/Content/NBCCJr.json', function (data) {
    $.each(data, function(i, dataPoint) {
        // Bla
      });
  });
)

... pero no pasa nada cuando se llama al código; la consola del navegador dice, "No se pudo cargar el recurso: el servidor respondió con un estado de 404 (No encontrado)"

¿Por qué no se encuentra? ¿No es "tilde whack filename" la ruta correcta al archivo?

ACTUALIZAR

También lo probé con los "golpes" al revés:

$.getJSON('~\Content\NBCCJr.json', function (data) {

... y obtuve el mismo resultado (" No se pudo cargar el recurso: el servidor respondió con un estado de 404 (No encontrado) ")

ACTUALIZACIÓN 2

Luego probé sin un golpe antepuesto así:

$.getJSON('Content/NBCCJr.json', function (data) {

... y recibo este mensaje ambiguo en la consola:

*GET http://localhost:9702/Content/NBCCJr.json 404 (Not Found) jquery.js:8724
XHR finished loading: "http://localhost:9702/Content/NBCCJr.json".*

¿Entonces no se encontró y aún se cargó de todos modos?

ACTUALIZACIÓN 3

Cuando intenté navegar hasta el archivo en el navegador cambiando:

http://localhost:9702/Default.cshtml

...a:

http://localhost:9702/Content/NBCCJr.json

Recibí un mensaje informativo de WSOD de Vint Cerf, Tim Berners-Lee y / o Al Gore que decía:

Error HTTP 404.3 - No encontrado La página que está solicitando no se puede servir debido a la configuración de la extensión. Si la pagina es un script, agregue un controlador. Si el archivo debe descargarse, agregue un mapa MIME.

ACTUALIZACIÓN 4

Gracias a JAM, ahora está funcionando.

Tuve que agregar esto a Web.Config:

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  </system.webServer>
B. Clay Shannon
fuente
No se preocupe por el código por ahora, vea si puede ubicar el archivo en su navegador para comenzar
Lee Taylor
He comentado todo el código después de la línea que se muestra, por esa razón. IOW, la función está vacía.
B. Clay Shannon
¿Conseguiste mostrar el json en tu navegador? es decir, poner la URL directamente en la barra de direcciones?
Lee Taylor
@greg: ¿Qué "apretó"?
B. Clay Shannon
2
¡Actualización 4 resuelta para mí! Thks \ o /
rodrigorf

Respuestas:

97

¿Ha intentado eliminar el ~?

Como en:

$.getJSON('/Content/dumboJr.json', function (data) {
    $.each(data, function(i, dataPoint) {
        // Bla
      });
  });
)

Para permitir que IIS sirva archivos JSON, intente agregar esto a su web.config:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
MERMELADA
fuente
Si (ahora tengo). Esto: $ .getJSON ('/ Content / NBCCJr.json', function (data) {da la misma respuesta.
B. Clay Shannon
¿Es una respuesta 404? ¿Ha intentado navegar hasta el archivo directamente en su navegador? ¿Está la carpeta de contenido en la raíz de su proyecto web?
JAM
Sí, la publicación dice eso. Por favor vea mis actualizaciones. Sí, el contenido es una carpeta de primer nivel, como se indica en la publicación original.
B. Clay Shannon
Echa un vistazo a esta publicación .
JAM
Si agrega el tipo de mime web.config especificado, estará bien :)
JAM
22

La solución es que necesita agregar el tipo de extensión de archivo json en Tipos MIME

Método 1

Vaya a IIS, seleccione su aplicación y busque tipos MIME

ingrese la descripción de la imagen aquí

Haga clic en Agregar desde el panel derecho

Extensión de nombre de archivo = .json

Tipo MIME = aplicación / json

ingrese la descripción de la imagen aquí

Después de agregar el tipo de archivo .json en Tipos MIME , reinicie IIS e intente acceder al archivo json


Método 2

Vaya a web.config de esa aplicación y agregue estas líneas en ella

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>
Kaushal Khamar
fuente
2

Intente poner el archivo * .json en webRoot, no en una subcarpeta. Y luego haga referencia a él como:

$.getJSON('NBCCJr.json', function (data) {

Esto, por supuesto, requiere la inclusión previa y la creación de instancias del objeto del sistema jQuery de: jquery.min.js o la estructura JSON de: json2-1.0.min.js

Paul Milleson
fuente
1

Cambié .json a .txt y la solicitud funciona bien. No estoy seguro de las consecuencias que puede causar .txt.

Pankaj
fuente
1

Si lo usa ASP.NET Core, simplemente coloque el archivo, wwwrootpero si usa el ASP.NETmarco, esto permite la extensión JSON desde web.config de la siguiente manera:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>

y

<location path="Content">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
Moaz Salem
fuente