Jquery 使用位于App_数据中的静态.json文件?

Jquery 使用位于App_数据中的静态.json文件?,jquery,asp.net,json,asp.net-mvc-4,Jquery,Asp.net,Json,Asp.net Mvc 4,在我的ASP.NET MVC 4项目中,我的App_Data文件夹中有一个.json文件,其中包含我要加载到D3.js中的地理数据 $("document").ready(function() { var jqxhr = $.getJSON("/Content/usa.json", function () { console.log("success"); }) .done(function () { console.log("s

在我的ASP.NET MVC 4项目中,我的
App_Data
文件夹中有一个
.json
文件,其中包含我要加载到D3.js中的地理数据

      $("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");
   });
});
到目前为止,我的工作方法是让jQuery对某个控制器执行一个AJAX调用,该调用返回一个JsonResult——如果成功,将JSON存储在某个Javascript变量中,该变量将加载到D3中。这次,我想跳过控制器,直接从App_数据文件夹请求一个静态
.json
文件

      $("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");
   });
});
我尝试使用
var url=“@url.Content(“~/App_Data/example.json”)”获取.json的相对路径,但是Javascript调试器用许多奇怪的正则表达式错误来斥责我

      $("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");
   });
});
我还尝试将该文件放入内容文件夹,以查看目录名是否有所不同

      $("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");
   });
});
  • var path=“@Url.Content(“~/Content/example.json”)导致
    网络错误:404未找到-本地主机:xxxxx/Content/u.json

          $("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");
       });
    });
    
  • var path=@Url.Content(“~/Content/example.json”)导致
    SyntaxError:无效的正则表达式标志u:var path=/Content/example.json

          $("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");
       });
    });
    
  • var json=$.getJSON(“../Content/example.json”)
    似乎向正确的目录发送请求,但返回404错误。此外,使用Razor语法指向相对URL也可以,但仍然是404
  • 也没用
我的问题是:是否可以只使用Javascript/jQuery处理存储在
App_Data
(或
Content
目录)中的JSON文件?在ASP.NET中,是否只有一种方法可以做到这一点?有没有更好的方法可以完全采用?

“我被许多奇怪的正则表达式错误和其他东西弄得不知所措”——可能需要更多的细节

      $("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");
   });
});
您是否尝试在普通javascript文件中使用Razor语法?Razor语法仅适用于cshtml文件

      $("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");
   });
});

我的第二个猜测是,
App\u数据
不是由web服务器提供的。这将是一个巨大的安全漏洞——任何用户都可以从该文件夹下载您的数据库文件。如果您想使其静态可用,请将其放入
脚本/
内容/
对于静态数据,只需将数据分配给js文件中的一个变量,并将其作为
标记放在页面中即可。将该变量传递给初始化方法

要在visual studio中读取json文件,首先需要在web.config中使用以下命令

      $("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");
   });
});
你可以在世界任何地方使用它

<configuration>
      <system.webServer>
       <staticContent>  
          <mimeMap fileExtension="json" mimeType="application/json" />
       </staticContent>
     </system.webServer>
      -------All other Settings---
      ----Your all other setting------
</configuration>
      $("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");
   });
});

问题是由一个、和引起的。我导航到

      $("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");
   });
});
C:\Users\<username>\Documents\IISExpress\config\applicationhost.config 
C:\Users\\Documents\IISExpress\config\applicationhost.config
并补充说

      $("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");
   });
});
<mimeMap fileExtension=".json" mimeType="application/json" />


到那里的
部分。仅将该行添加到web.config是不够的。因此,可以使用存储在../Content文件夹中的静态.json文件。

出于安全原因,您无法从服务器外部访问任何
App.*
文件夹。你必须将它转移到其他地方。我编辑了这个问题,以显示我以前使用内容目录而不是App_数据的方法,但由于这些尝试都没有成功,我只是想问,在我完全转移到另一种方法(MVC控制器方法)之前,我尝试做的事情是否可行。当然,我不应该在App_数据中存储.json。但是,当我尝试使用此方法时,将其存储在内容目录中失败:
var json=$.getJSON(“../Content/usa.json”,function(){console.log(json);})生成
“网络错误:404未找到-http://localhost:61103/Content/usa.json“
。请再次阅读我的完整答案。我已编辑了它,您将获得成功。我准备了一个演示应用程序来解决您的问题,并在其中获得了成功。我非常感谢您的帮助,但这对我来说并不奏效,我在下面研究/回答了我自己的问题。问题在于IISExpress。将该位添加到Web.config不起作用:我必须进一步深入,一直到IIS配置,并在那里更改mime设置。如果不这样做,
$.getJSON
尝试404s。您有问题,因为您在mime类型中使用了。(点)符号。请不要使用。(点)。我用点测试演示应用程序。它不起作用,然后我删除了点,它对我来说非常好。如果您愿意,我可以向您发送演示。但请先删除。(点)然后再试一次,如下所示。你看不到扩展文件点吗?技术上,我可以将.json复制并粘贴到脚本中,但我想将.json存储在内容文件夹中,因为它是一个相当大的文件,我觉得代码会很混乱。这是对我的问题的一个恰当的回答,我的问题很广泛,但我的问题恰恰是将(外部)数据分配给.js文件中的一个变量。mimeMap中有一个问题不要使用dot按如下方式使用它。你能看到没有dot with fileExtension=“json”不,伙计。这是IIS Express配置在默认情况下的样子:
,…好的,对我来说,我的解决方案与我描述的方式一样有效,我很高兴您已经解决了它。谢谢
      $("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");
   });
});