Pourquoi mon fichier json est-il introuvable?

85

J'ai un fichier json dans un dossier Content de mon projet asp.net:

<projectName>
    \Content
        NBCCJr.json

... et le code pour y accéder:

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

... mais rien ne se passe lorsque le code est appelé; la console du navigateur indique: «Échec du chargement de la ressource: le serveur a répondu avec un état 404 (non trouvé)»

Pourquoi ne le trouve-t-il pas? "Tilde whack filename" n'est-il pas la bonne route vers le fichier?

MISE À JOUR

Je l'ai aussi essayé avec les "whacks" à l'envers:

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

... et a obtenu le même résultat (" Échec du chargement de la ressource: le serveur a répondu avec un statut de 404 (non trouvé) ")

MISE À JOUR 2

Ensuite, je l'ai essayé sans un coup de tête ajouté:

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

... et je reçois ce message ambigu dans la console:

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

Donc il n'a pas été trouvé et pourtant chargé quand même?

MISE À JOUR 3

Lorsque j'ai tenté d'accéder au fichier dans le navigateur en modifiant:

http://localhost:9702/Default.cshtml

...à:

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

J'ai reçu un message WSOD informatif de Vint Cerf, Tim Berners-Lee et / ou Al Gore disant:

Erreur HTTP 404.3 - introuvable La page que vous demandez ne peut pas être servie en raison de la configuration de l'extension. Si la page est un script, ajoutez un gestionnaire. Si le fichier doit être téléchargé, ajoutez une carte MIME.

MISE À JOUR 4

Grâce à JAM, cela fonctionne maintenant.

J'ai dû ajouter ceci à Web.Config:

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  </system.webServer>
B. Clay Shannon
la source
Ne vous inquiétez pas pour le code pour le moment, voyez si vous pouvez localiser le fichier dans votre navigateur pour commencer
Lee Taylor
J'ai commenté tout le code après la ligne affichée, pour cette raison. IOW, la fonction est vide.
B. Clay Shannon
Avez-vous réussi à afficher le json dans votre navigateur? c'est-à-dire mettre l'URL directement dans la barre d'adresse?
Lee Taylor
@greg: Qu'est-ce que ça a "serré"?
B. Clay Shannon
2
La mise à jour 4 est résolue pour moi! Thks \ o /
rodrigorf

Réponses:

97

Avez-vous essayé de supprimer le ~?

Un péché:

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

Pour permettre à IIS de servir des fichiers JSON, essayez d'ajouter ceci à votre web.config:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
CONFITURE
la source
Oui (maintenant je l'ai). Ceci: $ .getJSON ('/ Content / NBCCJr.json', function (data) {donne la même réponse.
B. Clay Shannon
Est-ce une réponse 404? Avez-vous essayé d'accéder au fichier directement dans votre navigateur? Le dossier Content est-il à la racine de votre projet Web?
JAM
Oui, le message le dit. Veuillez consulter mes mises à jour. Oui, le contenu est un dossier de premier niveau, comme indiqué dans l'article d'origine.
B. Clay Shannon
Jetez un œil à ce post .
JAM
Si vous ajoutez le type mime web.config spécifié, tout ira bien :)
JAM
22

La solution est que vous devez ajouter le type d'extension de fichier json dans les types MIME

Méthode 1

Accédez à IIS, sélectionnez votre application et recherchez les types MIME

entrez la description de l'image ici

Cliquez sur Ajouter à partir du panneau de droite

Extension de nom de fichier = .json

Type MIME = application / json

entrez la description de l'image ici

Après avoir ajouté le type de fichier .json dans les types MIME , redémarrez IIS et essayez d'accéder au fichier json


Méthode 2

Accédez à web.config de cette application et ajoutez-y ces lignes

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

Essayez de placer le fichier * .json dans le webRoot, pas dans un sous-dossier. Et puis référencez-le comme:

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

Cela nécessite bien sûr l'inclusion et l'instanciation précédentes de l'objet système jQuery de: jquery.min.js ou de la structure JSON de: json2-1.0.min.js

Paul Milleson
la source
1

J'ai changé .json en .txt et la requête fonctionne correctement. Je ne suis pas sûr de la conséquence que le .txt peut causer.

Pankaj
la source
1

Si vous utilisez ASP.NET Core, placez simplement le fichier, wwwrootmais si vous utilisez un ASP.NETframework, cela permet l'extension JSON de web.config comme suit:

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

et

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