Perché il mio file json non viene trovato?


85

Ho un file json in una cartella dei contenuti all'interno del mio progetto asp.net:

<projectName>
    \Content
        NBCCJr.json

... e il codice per accedervi:

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

... ma non succede nulla quando viene chiamato il codice; la console del browser dice: "Impossibile caricare la risorsa: il server ha risposto con uno stato 404 (non trovato)"

Perché non viene trovato? "Tilde whack filename" non è il percorso corretto per il file?

AGGIORNARE

L'ho provato anche con i "whacks" al contrario:

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

... e ha ottenuto lo stesso risultato (" Impossibile caricare la risorsa: il server ha risposto con uno stato 404 (Non trovato) ")

AGGIORNAMENTO 2

Quindi ho provato senza un colpo preposto in questo modo:

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

... e ottengo questo messaggio ambiguo nella console:

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

Quindi non è stato trovato e ancora caricato comunque?

AGGIORNAMENTO 3

Quando ho tentato di navigare nel file nel browser modificando:

http://localhost:9702/Default.cshtml

...per:

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

Ho ricevuto un messaggio informativo WSOD da Vint Cerf, Tim Berners-Lee e / o Al Gore che diceva:

Errore HTTP 404.3 - Non trovato La pagina richiesta non può essere servita a causa della configurazione dell'estensione. Se la pagina è uno script, aggiungi un gestore. Se il file deve essere scaricato, aggiungi una mappa MIME.

AGGIORNAMENTO 4

Grazie a JAM, ora funziona.

Ho dovuto aggiungere questo a Web.Config:

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

Non preoccuparti del codice per ora, vedi se riesci a individuare il file nel tuo browser per iniziare
Lee Taylor

Per questo motivo ho commentato tutto il codice dopo la riga mostrata. IOW, la funzione è vuota.
B. Clay Shannon

Sei riuscito a mostrare il json nel tuo browser? cioè mettendo l'URL direttamente nella barra degli indirizzi?
Lee Taylor

@greg: cosa ha "stretto"?
B. Clay Shannon

2
Aggiornamento 4 risolto per me! Thks \ o /
rodrigorf

Risposte:


97

Hai provato a rimuovere il ~?

Come in:

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

Per consentire a IIS di servire file JSON, prova ad aggiungerlo al tuo web.config:

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

Sì (ora ce l'ho). Questa: $ .getJSON ('/ Content / NBCCJr.json', function (data) {dà la stessa risposta.
B. Clay Shannon

È una risposta 404? Hai provato a navigare nel file direttamente nel tuo browser? La cartella Content si trova nella radice del tuo progetto web?
JAM

Sì, il post lo dice. Si prega di vedere i miei aggiornamenti. Sì, Content è una cartella di primo livello, come indicato nel post originale.
B. Clay Shannon

Dai un'occhiata a questo post .
JAM

Se aggiungi il tipo mime web.config specificato, starai bene :)
JAM

22

La soluzione è che devi aggiungere il tipo di estensione del file json nei tipi MIME

Metodo 1

Vai su IIS, seleziona la tua applicazione e trova i tipi MIME

inserisci qui la descrizione dell'immagine

Fare clic su Aggiungi dal pannello di destra

Estensione nome file = .json

Tipo MIME = application / json

inserisci qui la descrizione dell'immagine

Dopo aver aggiunto il tipo di file .json in Tipi MIME , riavvia IIS e prova ad accedere al file json


Metodo 2

Vai a web.config di quell'applicazione e aggiungi queste righe

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

2

Prova a mettere il file * .json nella webRoot, non in una sottocartella. E poi riferiscilo come:

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

Ciò ovviamente richiede l'inclusione e l'istanza precedente dell'oggetto di sistema jQuery da: jquery.min.js o la struttura JSON da: json2-1.0.min.js


1

Ho cambiato .json in .txt e la richiesta funziona correttamente. Non sono sicuro delle conseguenze che può causare .txt.


1

Se si utilizza ASP.NET Core, è sufficiente inserire il file, wwwrootma se si utilizza ASP.NETframework, questo consente l'estensione JSON da web.config come segue:

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

e

<location path="Content">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.