Warum wurde meine JSON-Datei nicht gefunden?

85

Ich habe eine JSON-Datei in einem Inhaltsordner in meinem asp.net-Projekt:

<projectName>
    \Content
        NBCCJr.json

... und den Code, um darauf zuzugreifen:

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

... aber nichts passiert, wenn der Code aufgerufen wird; Die Browserkonsole sagt: "Ressource konnte nicht geladen werden: Der Server hat mit dem Status 404 (Nicht gefunden) geantwortet."

Warum wird es nicht gefunden? Ist "Tilde Whack-Dateiname" nicht der richtige Weg zur Datei?

AKTUALISIEREN

Ich habe es auch mit den "Whacks" rückwärts versucht:

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

... und das gleiche Ergebnis erhalten (" Ressource konnte nicht geladen werden: Der Server hat mit dem Status 404 geantwortet (nicht gefunden) ")

UPDATE 2

Dann habe ich es so ohne vorangestellten Schlag versucht:

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

... und ich bekomme diese mehrdeutige Nachricht in der Konsole:

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

Also wurde es nicht gefunden und trotzdem geladen?

UPDATE 3

Als ich versuchte, durch Ändern zu der Datei im Browser zu navigieren:

http://localhost:9702/Default.cshtml

...zu:

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

Ich erhielt eine informative WSOD-Nachricht von Vint Cerf, Tim Berners-Lee und / oder Al Gore mit den Worten:

HTTP-Fehler 404.3 - Nicht gefunden Die von Ihnen angeforderte Seite kann aufgrund der Erweiterungskonfiguration nicht bereitgestellt werden. Wenn es sich bei der Seite um ein Skript handelt, fügen Sie einen Handler hinzu. Wenn die Datei heruntergeladen werden soll, fügen Sie eine MIME-Map hinzu.

UPDATE 4

Dank JAM funktioniert es jetzt.

Ich musste dies zu Web.Config hinzufügen:

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  </system.webServer>
B. Clay Shannon
quelle
Machen Sie sich vorerst keine Sorgen um den Code. Sehen Sie nach, ob Sie die Datei zunächst in Ihrem Browser finden können
Lee Taylor
Aus diesem Grund habe ich den gesamten Code nach der angezeigten Zeile auskommentiert. IOW, die Funktion ist leer.
B. Clay Shannon
Haben Sie es geschafft, den JSON in Ihrem Browser anzuzeigen? dh die URL direkt in die Adressleiste einfügen?
Lee Taylor
@greg: Was hat es "geballt"?
B. Clay Shannon
2
Update 4 für mich gelöst! Thks \ o /
rodrigorf

Antworten:

97

Haben Sie versucht, das zu entfernen ~?

Wie in:

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

Fügen Sie dies zu Ihrer web.config hinzu, damit der IIS JSON-Dateien bereitstellen kann:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
MARMELADE
quelle
Ja (jetzt habe ich). Dies: $ .getJSON ('/ Content / NBCCJr.json', Funktion (Daten) {gibt die gleiche Antwort.
B. Clay Shannon
Ist es eine 404 Antwort? Haben Sie versucht, direkt in Ihrem Browser zu der Datei zu navigieren? Befindet sich der Inhaltsordner im Stammverzeichnis Ihres Webprojekts?
JAM
Ja, der Beitrag sagt das. Bitte beachten Sie meine Updates. Ja, Inhalt ist ein Ordner der ersten Ebene, wie im ursprünglichen Beitrag angegeben.
B. Clay Shannon
Schauen Sie sich diesen Beitrag an .
JAM
Wenn Sie den angegebenen MIME-Typ web.config hinzufügen, ist alles in Ordnung :)
JAM
22

Die Lösung besteht darin, dass Sie den Mson-Dateierweiterungstyp in MIME-Typen hinzufügen müssen

Methode 1

Gehen Sie zu IIS, wählen Sie Ihre Anwendung aus und suchen Sie nach MIME-Typen

Geben Sie hier die Bildbeschreibung ein

Klicken Sie im rechten Bereich auf Hinzufügen

Dateinamenerweiterung = .json

MIME-Typ = application / json

Geben Sie hier die Bildbeschreibung ein

Nach dem Hinzufügen .json Dateitypen in MIME - Typ , IIS neu starten und versuchen , dem Zugriff auf JSON - Datei


Methode 2

Gehen Sie zu web.config dieser Anwendung und fügen Sie diese Zeilen hinzu

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

Versuchen Sie, die * .json-Datei in den webRoot und nicht in einen Unterordner zu legen. Und dann verweisen Sie wie folgt:

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

Dies erfordert natürlich die vorherige Aufnahme und Instanziierung des jQuery- Systemobjekts von: jquery.min.js oder der JSON-Struktur von: json2-1.0.min.js

Paul Milleson
quelle
1

Ich habe .json in .txt geändert und die Anfrage funktioniert einwandfrei. Ich bin mir nicht sicher, welche Konsequenzen .txt haben kann.

Pankaj
quelle
1

Wenn Sie verwenden ASP.NET Core, fügen Sie einfach die Datei ein, wwwrootaber wenn Sie ASP.NETFramework verwenden, ermöglicht dies die JSON-Erweiterung von web.config wie folgt:

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

und

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