在我的ASP.NET MVC 4项目中,我的.json
文件夹中有一个App_Data
文件,其中包含我要加载到D3.js中的地理数据。
到目前为止,我的工作方法是让jQuery对一些返回JsonResult的Controller执行AJAX调用 - 并且在成功时,将JSON存储在一些加载到D3中的Javascript变量中。这一次,我想跳过控制器并直接从App_Data文件夹中请求静态.json
文件。
我尝试使用var url = "@Url.Content("~/App_Data/example.json")";
抓取.json的相对路径,但是Javascript调试器使我厌倦了很多奇怪的正则表达式错误。
我还尝试将文件放入Content文件夹,以查看目录名是否有所不同。
var path = "@Url.Content("~/Content/example.json")";
导致了
NetworkError:404 Not Found - localhost:xxxxx / Content / u.json
var path = @Url.Content("~/Content/example.json");
导致了
SyntaxError:无效的正则表达式标志u:var path = /Content/example.json;
var json = $.getJSON("../Content/example.json")
似乎向正确的目录发送请求,但返回404错误。此外,使用Razor语法指向相对URL工作,但仍然是404s。我的问题是:是否可以使用仅 Javascript / jQuery,使用存储在App_Data
(或Content
目录)中的JSON文件?在ASP.NET中,是否只有一种方式来执行此操作?是否有更好的方法可以完全采取行动?
答案 0 :(得分:10)
要首先在visual studio中读取json文件,您需要在web.config
中使用以下内容你可以在
的任何地方使用它<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="json" mimeType="application/json" />
</staticContent>
</system.webServer>
-------All other Settings---
----Your all other setting------
</configuration>
由于安全限制,无法访问App_Data,但您可以将文件放在应用程序的其他位置。使用jquery函数getJSON()执行此操作是一个示例。
$("document").ready(function() {
var jqxhr = $.getJSON("/Content/usa.json", function () {
console.log("success");
})
.done(function () {
console.log("second success");
})
.fail(function () {
console.log("error");
})
.always(function () {
console.log("complete");
});
});
快乐编码享受
答案 1 :(得分:2)
问题是由problem with IIS Express和this post helped me resolve the issue引起的。我导航到了
C:\Users\<username>\Documents\IISExpress\config\applicationhost.config
并添加了
<mimeMap fileExtension=".json" mimeType="application/json" />
到那里的<staticContent>
部分。将该行添加到web.config是不够的。因此 可以使用存储在../Content文件夹中的静态.json文件。
答案 2 :(得分:1)
“让我摆脱了许多奇怪的正则表达式错误和其他东西” - 可能需要更多细节。
您是否尝试在普通的javascript文件中使用Razor语法? Razor语法仅适用于cshtml文件。
我的第二个猜测是网络服务器不提供App_Data
。这将是一个巨大的安全漏洞 - 任何用户都可以简单地从该文件夹下载您的数据库文件。如果您想要静态使用它,请将其放在Scripts/
或Content/
。
答案 3 :(得分:0)
对于静态数据,只需将数据分配给js文件中的变量,并将其作为<script>
标记放入页面中。将该变量传递给初始化方法