将外部本地JSON文件读入Javascript

将外部本地JSON文件读入Javascript,javascript,json,Javascript,Json,我正在学习将外部本地JSON文件读入javascript。我遵循下面的链接 然而,我没能做到。我的C驱动器中有一个test.json,路径是“C:\\test.json”。我认为我的程序是这样工作的:当本地json文件中的内容被更新时,我的程序将提醒json文件中的数据。我不知道我的程序出了什么问题。希望有人能帮我。先谢谢你 <!DOCTYPE html> <html> <head> <meta charset="UTF-8">

我正在学习将外部本地JSON文件读入javascript。我遵循下面的链接

然而,我没能做到。我的C驱动器中有一个test.json,路径是“C:\\test.json”。我认为我的程序是这样工作的:当本地json文件中的内容被更新时,我的程序将提醒json文件中的数据。我不知道我的程序出了什么问题。希望有人能帮我。先谢谢你

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>noName</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
    <script type="text/javascript" src="test.json"></script>
    <script type="text/javascript" src="javascrip.js"></script>
</head>


<script type="text/javascript">

    $(document).ready(function() {
        alert("goes here ");
        readTextFile("c:/test.json", function(text){
        var data = JSON.parse(text);
        alert(data);
    });
});


function readTextFile(file, callback) {
     var rawFile = new XMLHttpRequest();
     rawFile.overrideMimeType("application/json");
     rawFile.open("GET", file, true);
     rawFile.onreadystatechange = function() {
         if (rawFile.readyState === 4 && rawFile.status == "200") {
             callback(rawFile.responseText);
         }
     };
     rawFile.send(null);
}

诺南
$(文档).ready(函数(){
警惕(“走到这里”);
readTextFile(“c:/test.json”,函数(文本){
var data=JSON.parse(文本);
警报(数据);
});
});
函数readTextFile(文件,回调){
var rawFile=new XMLHttpRequest();
overrideMimeType(“application/json”);
打开(“GET”,file,true);
rawFile.onreadystatechange=函数(){
if(rawFile.readyState==4&&rawFile.status==200){
回调(rawFile.responseText);
}
};
rawFile.send(空);
}

test.json

{“注释”:[“s0”、“s5”、“s4”、“s3”、“s2”、“s1”]}


您无法通过Ajax访问本地文件。浏览器定义操作起来不安全

对于本地学习和测试,我强烈建议使用Firefox。这是一款非常适合开发的浏览器,因为它在加载本地文件方面非常宽松

例如,它可以使用xhr加载本地文件,没有问题

请注意,您无法从本地系统加载任何文件。。。只需从HTML页面(相对)“foo/bar/data.json”中选择“looking forward”,而不是“C:/data.json”

另一个要考虑的是本地文件系统和HTTP是两种完全不同的动物。当浏览器发出“http请求”时,它假定一个标头、响应代码和数据将返回到它。然而,当加载本地文件时,没有诸如头或响应代码之类的东西,因为“请求”只是加载原始数据的系统级消息。这些差异的一个指标是,当您将文件从系统拖放到浏览器窗口时,您将看到文件:///与使用http:///的网页

希望这有帮助

还有最后一件事。当您使用overrideMimeType(“application/json”)时,您要求浏览器将结果响应解析为json,而不是文本。那么您可能想尝试只返回响应

function readTextFile(file, callback) {
    var rawFile = new XMLHttpRequest();
    rawFile.overrideMimeType("application/json");
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function() {
       if (rawFile.readyState === 4 && rawFile.status == "200") {
           // callback(rawFile.responseText);
           callback(rawFile.response);
       }
    };
    rawFile.send(null);
}
这样以后就不必解析JSON了

或者,不要过度处理响应,像现在这样处理JSON解析

function readTextFile(file, callback) {
    var rawFile = new XMLHttpRequest();
    //rawFile.overrideMimeType("application/json");
    rawFile.open("GET", file, true);
    rawFile.onreadystatechange = function() {
       if (rawFile.readyState === 4 && rawFile.status == "200") {
           callback(rawFile.responseText);
       }
    };
    rawFile.send(null);
}

使用AngularJS:$http服务

$http.get(url)
.then(function(response) {
  // Use the response Json data
});
使用jQuery:

$.getJSON(url, function(result){
    //use result Json data
});

其中URL将是本地json文件的路径。

在javascript中严格禁止加载本地文件。这是这种语言的缺陷之一。然而,json已经是一个javascript对象,json文件的内容可以在脚本标记中读取


问题是如何创建json文件,因为在包含脚本标记后,将其存储在变量中更容易引用该变量。

我很确定您无法获取本地文件。如果可以,您可能需要在XMLHttpRequest路径中使用
文件:
协议。应该会有帮助。我发布的链接中的第三个答案说我可能可以获得本地文件。。我知道这很奇怪。它可能在某些浏览器中工作,而在其他浏览器中不工作,这取决于您的设置。如果您仔细想想,如果任何网页都可以读取您计算机上任意文件的内容,这将是一个严重的安全问题。我不认为您的test.json位置是
c:/test.json
,转到test.json文件,右击它,然后单击location选项卡,您将找到test.json文件在系统中的确切路径。我同意您的看法,但目前我想我将继续获取本地文件。我必须探索我是如何做到的,我认为这是可以做到的。请看第三个答案,你误解了答案。该文件由web服务器提供,并使用http协议(如常规css/html/js文件)加载。如果您在chrome上执行此操作,则必须运行--允许从-files@vkosyj试试jsonp函数。@HarryLim你可以看到他使用了本地文件,这让我觉得他只是加载了本地文件,这对我来说很有意义。我还是不太确定这条路。你介意看看这个吗?“test.json”文件应与HTML文件位于同一文件夹中。