加载本地JSON文件
我试图加载一个本地的JSON文件,但它不会工作。 这是我的JavaScript代码(使用jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
test.json文件:
{"a" : "b", "c" : "d"}
什么都不显示,Firebug告诉我数据未定义。 在Firebug中,我可以看到json.responseText
,它是好的和有效的,但是当我复制该行时,它很奇怪:
var data = eval("(" +json.responseText + ")");
在Firebug的控制台中,它可以工作,我可以访问数据。
任何人都有解决方案?
$.getJSON
是异步的,所以你应该这样做:
$.getJSON("test.json", function(json) {
console.log(json); // this will show the info it in firebug console
});
我有相同的需求(测试我的angularjs应用程序),我发现的唯一方法是使用require.js:
var json = require('./data.json'); //(with path)
注意:文件被加载一次,进一步的调用将使用缓存。
更多关于使用nodejs读取文件的信息:http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js:http://requirejs.org/
如果你想让用户选择本地json文件(在文件系统的任何地方),那么下面的解决方案工作。
它使用使用FileReader和JSON.parser(并没有jQuery)。
<html>
<body>
<form id="jsonFile" name="jsonFile" enctype="multipart/form-data" method="post">
<fieldset>
<h2>Json File</h2>
<input type='file' id='fileinput'>
<input type='button' id='btnLoad' value='Load' onclick='loadFile();'>
</fieldset>
</form>
<script type="text/javascript">
function loadFile() {
var input, file, fr;
if (typeof window.FileReader !== 'function') {
alert("The file API isn't supported on this browser yet.");
return;
}
input = document.getElementById('fileinput');
if (!input) {
alert("Um, couldn't find the fileinput element.");
}
else if (!input.files) {
alert("This browser doesn't seem to support the `files` property of file inputs.");
}
else if (!input.files[0]) {
alert("Please select a file before clicking 'Load'");
}
else {
file = input.files[0];
fr = new FileReader();
fr.onload = receivedText;
fr.readAsText(file);
}
function receivedText(e) {
let lines = e.target.result;
var newArr = JSON.parse(lines);
}
}
</script>
</body>
</html>
以下是FileReader的一个很好的介绍:http://www.html5rocks.com/en/tutorials/file/dndfiles/
链接地址: http://www.djcxy.com/p/27557.html