为什么找不到我的json文件?


85

我在asp.net项目的Content文件夹中有一个json文件:

<projectName>
    \Content
        NBCCJr.json

...以及访问它的代码:

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

...但是调用代码时什么也没发生;浏览器控制台说:“无法加载资源:服务器响应状态为404(未找到)”

为什么找不到?“波浪号文件名”不是通往文件的正确路径吗?

更新

我还尝试了向后“重击”:

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

...并得到相同的结果(“无法加载资源:服务器响应状态为404(未找到) ”)

更新2

然后,我尝试了这种方式,因此没有前置重击:

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

...然后我在控制台中收到以下模棱两可的消息:

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

因此,找不到它并仍然加载了吗?

更新3

当我尝试通过更改导航到浏览器中的文件时:

http://localhost:9702/Default.cshtml

...至:

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

我收到了来自Vint Cerf,Tim Berners-Lee和/或Al Gore的有用的WSOD消息,内容是:

HTTP错误404.3-找不到由于扩展名配置,无法提供您请求的页面。如果页面是脚本,请添加处理程序。如果应下载文件,请添加一个MIME映射。

更新4

感谢JAM,它现在可以工作了。

我必须将其添加到Web.Config:

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

现在不用担心代码,看看是否可以在浏览器中找到文件的开头
Lee Taylor

因此,我在显示的行之后注释掉了所有代码。IOW,该函数为空。
B. Clay Shannon

您是否设法在浏览器中显示json?即直接将网址放入地址栏?
Lee Taylor

@greg:它是什么?
B. Clay Shannon 2014年

2
更新4为我解决了!Thks \ o /
Rodrigorf

Answers:


97

您是否尝试过删除~

如:

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

要允许IIS提供JSON文件,请尝试将其添加到web.config中:

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

是的(现在有)。这样:$ .getJSON( '/内容/ NBCCJr.json',函数(数据){给出了同样的反应。
B.粘土香农

是404回应吗?您是否尝试过直接在浏览器中导航到文件?“内容”文件夹是否位于Web项目的根目录中?
JAM

是的,该帖子说。请查看我的更新。是的,内容是第一级文件夹,如原始帖子中所述。
B. Clay Shannon

看一下这篇文章
2013年

如果您添加了指定的web.config MIME类型,则可以::
JAM 2013年

22

解决方案是您需要在MIME类型中添加json文件扩展名类型

方法1

转到IIS,选择您的应用程序并查找MIME类型

在此处输入图片说明

单击从右侧面板添加

文件扩展名= .json

MIME类型= application / json

在此处输入图片说明

MIME类型中添加.json文件类型后,重新启动IIS并尝试访问json文件


方法2

转到该应用程序的web.config并在其中添加此行

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

2

尝试将* .json文件放在webRoot中,而不是放在子文件夹中。然后像这样引用它:

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

当然,这需要先前包含和实例化jQuery系统对象(来自jquery.min.js)或JSON结构(来自json2-1.0.min.js)。


1

我将.json更改为.txt,请求工作正常。我不确定.txt可能导致的后果。


1

如果使用ASP.NET Core,只需将文件放入其中,wwwroot但是如果使用ASP.NET框架,则允许通过web.config进行JSON扩展,如下所示:

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

<location path="Content">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.