Dlaczego nie znaleziono mojego pliku JSON?

85

Mam plik json w folderze zawartości w moim projekcie asp.net:

<projectName>
    \Content
        NBCCJr.json

... i kod dostępu do niego:

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

... ale nic się nie dzieje po wywołaniu kodu; konsola przeglądarki wyświetla komunikat „Nie udało się załadować zasobu: serwer odpowiedział stanem 404 (Nie znaleziono)”

Dlaczego go nie znaleziono? Czy „tilde whack filename” nie jest prawidłową drogą do pliku?

AKTUALIZACJA

Próbowałem też z „waleniem” wstecz:

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

... i otrzymałem ten sam wynik („ Nie udało się załadować zasobu: serwer odpowiedział statusem 404 (Nie znaleziono) ”)

AKTUALIZACJA 2

Potem spróbowałem tego bez dodanego uderzenia w ten sposób:

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

... i otrzymuję w konsoli ten niejednoznaczny komunikat:

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

Więc nie został znaleziony i mimo to załadowany?

AKTUALIZACJA 3

Kiedy próbowałem przejść do pliku w przeglądarce, zmieniając:

http://localhost:9702/Default.cshtml

...do:

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

Otrzymałem informacyjną wiadomość WSOD od Vinta Cerfa, Tima Berners-Lee i / lub Ala Gore'a:

Błąd HTTP 404.3 - nie znaleziono Żądana strona nie może zostać obsłużona z powodu konfiguracji rozszerzenia. Jeśli strona jest skryptem, dodaj procedurę obsługi. Jeśli plik ma zostać pobrany, dodaj mapę MIME.

AKTUALIZACJA 4

Dzięki JAM teraz działa.

Musiałem dodać to do Web.Config:

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  </system.webServer>
B. Clay Shannon
źródło
Na razie nie martw się o kod, sprawdź, czy możesz zlokalizować plik w przeglądarce, aby zacząć od
Lee Taylor
Z tego powodu wykomentowałem cały kod po wyświetlonej linii. IOW, funkcja jest pusta.
B. Clay Shannon
Czy udało Ci się wyświetlić plik json w przeglądarce? tj. umieszczenie adresu URL bezpośrednio w pasku adresu?
Lee Taylor
@greg: Co spowodowało "zaciśnięcie"?
B. Clay Shannon
2
Aktualizacja 4 rozwiązana za mnie! Dzięki \ o /
rodrigorf

Odpowiedzi:

97

Czy próbowałeś usunąć ~?

Jak w:

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

Aby umożliwić usługom IIS obsługę plików JSON, spróbuj dodać to do pliku web.config:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
DŻEM
źródło
Tak (teraz mam). To: $ .getJSON ('/ Content / NBCCJr.json', function (data) {daje taką samą odpowiedź.
B. Clay Shannon
Czy to odpowiedź 404? Czy próbowałeś przejść do pliku bezpośrednio w przeglądarce? Czy folder Content znajduje się w katalogu głównym projektu internetowego?
JAM,
Tak, post o tym mówi. Zobacz moje aktualizacje. Tak, zawartość to folder pierwszego poziomu, jak wskazano w oryginalnym poście.
B. Clay Shannon,
Spójrz na ten post .
JAM
Jeśli dodasz określony typ mime web.config, wszystko będzie dobrze :)
JAM
22

Rozwiązanie polega na tym, że musisz dodać typ rozszerzenia pliku json w typach MIME

Metoda 1

Przejdź do IIS, wybierz swoją aplikację i znajdź typy MIME

wprowadź opis obrazu tutaj

Kliknij Dodaj z prawego panelu

Rozszerzenie nazwy pliku = .json

Typ MIME = application / json

wprowadź opis obrazu tutaj

Po dodaniu .json typ pliku w typów MIME , Restart IIS i próby uzyskania dostępu do pliku json


Metoda 2

Przejdź do web.config tej aplikacji i dodaj do niej te linie

 <system.webServer>
   <staticContent>
     <mimeMap fileExtension=".json" mimeType="application/json" />
   </staticContent>
 </system.webServer>
Kaushal Khamar
źródło
2

Spróbuj umieścić plik * .json w webRoot, a nie w podfolderze. Następnie odwołaj się do tego w taki sposób:

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

To oczywiście wymaga wcześniejszego włączenia i utworzenia instancji obiektu systemowego jQuery z: jquery.min.js lub struktury JSON z: json2-1.0.min.js

Paul Milleson
źródło
1

Zmieniłem .json na .txt i żądanie działa poprawnie. Nie jestem pewien, jakie konsekwencje może spowodować plik .txt.

Pankaj
źródło
1

Jeśli używasz ASP.NET Core, po prostu umieść plik, wwwrootale jeśli używasz ASP.NETframeworka, pozwala to na rozszerzenie JSON z web.config w następujący sposób:

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

i

<location path="Content">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
Moaz Salem
źródło