Por que meu arquivo json não foi encontrado?

85

Eu tenho um arquivo json em uma pasta de conteúdo dentro do meu projeto asp.net:

<projectName>
    \Content
        NBCCJr.json

... e o código para acessá-lo:

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

... mas nada acontece quando o código é chamado; o console do navegador diz: "Falha ao carregar o recurso: o servidor respondeu com um status 404 (não encontrado)"

Por que não foi encontrado? "Tilde whack filename" não é o caminho correto para o arquivo?

ATUALIZAR

Também tentei com os "golpes" para trás:

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

... e obteve o mesmo resultado (" Falha ao carregar o recurso: o servidor respondeu com um status 404 (não encontrado) ")

ATUALIZAÇÃO 2

Então eu tentei sem um golpe prependido assim:

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

... e recebo esta mensagem ambígua no console:

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

Portanto, ele não foi encontrado e ainda assim carregado?

ATUALIZAÇÃO 3

Quando tentei navegar até o arquivo no navegador, alterando:

http://localhost:9702/Default.cshtml

...para:

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

Recebi uma mensagem WSOD informativa de Vint Cerf, Tim Berners-Lee e / ou Al Gore dizendo:

Erro HTTP 404.3 - Não encontrado A página que você está solicitando não pode ser servida devido à configuração da extensão. Se a página for um script, adicione um manipulador. Se o arquivo deve ser baixado, adicione um mapa MIME.

ATUALIZAÇÃO 4

Graças ao JAM, agora está funcionando.

Tive que adicionar isso ao Web.Config:

  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
    </staticContent>
  </system.webServer>
B. Clay Shannon
fonte
Não se preocupe com o código por enquanto, veja se consegue localizar o arquivo em seu navegador para começar
Lee Taylor
Comentei todo o código após a linha mostrada, por esse motivo. IOW, a função está vazia.
B. Clay Shannon
Você conseguiu mostrar o json no seu navegador? ou seja, colocar o URL diretamente na barra de endereço?
Lee Taylor
@greg: O que "apertou"?
B. Clay Shannon
2
Atualização 4 resolvida para mim! Thks \ o /
rodrigorf

Respostas:

97

Você já tentou remover o ~?

Como em:

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

Para permitir que o IIS forneça arquivos JSON, tente adicionar isto ao seu web.config:

<staticContent>
    <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
GELÉIA
fonte
Sim (agora eu tenho). Este: $ .getJSON ('/ Content / NBCCJr.json', function (data) {dá a mesma resposta.
B. Clay Shannon
É uma resposta 404? Você já tentou navegar até o arquivo diretamente no navegador? A pasta de conteúdo está na raiz do seu projeto da web?
JAM
Sim, o post diz isso. Por favor, veja minhas atualizações. Sim, o conteúdo é uma pasta de primeiro nível, conforme indicado na postagem original.
B. Clay Shannon
Dê uma olhada neste post .
JAM
Se você adicionar o tipo mime web.config especificado, ficará bem :)
JAM
22

A solução é que você precisa adicionar o tipo de extensão de arquivo json em Tipos MIME

Método 1

Vá para IIS, selecione seu aplicativo e encontre tipos de MIME

insira a descrição da imagem aqui

Clique em Adicionar no painel direito

Extensão do nome do arquivo = .json

Tipo MIME = aplicativo / json

insira a descrição da imagem aqui

Depois de adicionar o tipo de arquivo .json em Tipos MIME , reinicie o IIS e tente acessar o arquivo json


Método 2

Vá para web.config desse aplicativo e adicione essas linhas nele

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

Tente colocar o arquivo * .json no webRoot, não em uma subpasta. E então referencie-o como:

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

É claro que isso requer a inclusão e instanciação prévia do objeto do sistema jQuery de: jquery.min.js ou a estrutura JSON de: json2-1.0.min.js

Paul Milleson
fonte
1

Eu mudei .json para .txt e a solicitação está funcionando bem. Não tenho certeza sobre as consequências que o .txt pode causar.

Pankaj
fonte
1

Se você usar ASP.NET Core, apenas coloque o arquivo, wwwrootmas se você usar a ASP.NETestrutura, isso permite a extensão JSON do web.config da seguinte maneira:

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

e

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