我的脚本目前看起来像这样:
<script type="text/javascript">
function updateMe(){
var x = 0;
var jsonstr = '{"date":"July 4th", "event":"Independence Day"}';
var activity=JSON.parse(jsonstr);
while(x<10){
date = document.getElementById("date"+x).innerHTML = activity.date;
event = document.getElementById("event"+x).innerHTML = activity.event;
x++;
}
}
</script>
其中日期“x”和事件“x”是一系列html标签。此功能在页面加载(onload)时运行。我的目标是完成同样的事情,只能从本地.json文件,而不是我上面的硬编码。我已经查看了http://api.jquery.com/jQuery.getJSON/。
本地.json文件如下所示:
{"date":"July 4th", "event":"Independence Day"}
有什么建议吗?
答案 0 :(得分:33)
当你说.json文件时,假设你的意思是“在本地文件系统上存档”。
您需要保存格式为jsonp的json数据,并使用file:// url
来访问它。
您的HTML将如下所示:
<script src="file://c:\\data\\activity.jsonp"></script>
<script type="text/javascript">
function updateMe(){
var x = 0;
var activity=jsonstr;
foreach (i in activity) {
date = document.getElementById(i.date).innerHTML = activity.date;
event = document.getElementById(i.event).innerHTML = activity.event;
}
}
</script>
文件c:\ data \ activity.jsonp包含以下行:
jsonstr = [ {"date":"July 4th", "event":"Independence Day"} ];
答案 1 :(得分:3)
你可以这样做...... 只需给出json文件的正确路径......
<!doctype html>
<html>
<head>
<script type="text/javascript" src="abc.json"></script>
<script type="text/javascript" >
function load() {
var mydata = JSON.parse(data);
alert(mydata.length);
var div = document.getElementById('data');
for(var i = 0;i < mydata.length; i++)
{
div.innerHTML = div.innerHTML + "<p class='inner' id="+i+">"+ mydata[i].name +"</p>" + "<br>";
}
}
</script>
</head>
<body onload="load()">
<div id= "data">
</div>
</body>
</html>
只需获取数据并将其附加到div ...最初在警报中打印长度。
这是我的Json文件:abc.json
data = '[{"name" : "Riyaz"},{"name" : "Javed"},{"name" : "Arun"},{"name" : "Sunil"},{"name" : "Rahul"},{"name" : "Anita"}]';
答案 2 :(得分:1)
声明:截至2018年7月12日,其他答案均已过时。 JSONP现在被认为是一个可怕的想法
如果将JSON作为字符串,则JSON.parse()
可以正常工作。由于要从文件加载json,因此需要对它执行XMLHttpRequest。例如(这是w3schools.com示例):
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var myObj = JSON.parse(this.responseText);
document.getElementById("demo").innerHTML = myObj.name;
}
};
xmlhttp.open("GET", "json_demo.txt", true);
xmlhttp.send();
<!DOCTYPE html>
<html>
<body>
<h2>Use the XMLHttpRequest to get the content of a file.</h2>
<p>The content is written in JSON format, and can easily be converted into a JavaScript object.</p>
<p id="demo"></p>
<p>Take a look at <a href="json_demo.txt" target="_blank">json_demo.txt</a></p>
</body>
</html>
由于该文件不在此处,因此在这里不起作用。不过请转到以下w3schools示例:https://www.w3schools.com/js/tryit.asp?filename=tryjson_ajax
这是JSON.parse()的文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
以下是摘要:
JSON.parse()方法解析一个JSON字符串,构造该字符串描述的JavaScript值或对象。可以提供一个可选的reviver函数,以在返回结果对象之前对其进行转换。
以下是使用的示例:
var json = '{"result":true, "count":42}';
obj = JSON.parse(json);
console.log(obj.count);
// expected output: 42
console.log(obj.result);
// expected output: true
以下是https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest中XMLHttpRequest的摘要:
使用XMLHttpRequest(XHR)对象与服务器进行交互。您可以从URL检索数据,而不必刷新整个页面。这使网页可以更新页面的一部分,而不会中断用户的操作。 XMLHttpRequest在Ajax编程中大量使用。
如果您不想使用XMLHttpRequests,那么JQUERY方式(我不确定为什么它不适合您)是http://api.jquery.com/jQuery.getJSON/
由于无法正常工作,我将尝试使用XMLHttpRequests
您也可以尝试AJAX请求:
$.ajax({
'async': false,
'global': false,
'url': "/jsonfile.json",
'dataType': "json",
'success': function (data) {
// do stuff with data
}
});
答案 3 :(得分:1)
不是将数据存储为纯JSON,而是将其存储为JavaScript Object Literal; 例如
window.portalData = [
{
"kpi" : "NDAR",
"data": [15,152,2,45,0,2,0,16,88,0,174,0,30,63,0,0,0,0,448,4,0,139,1,7,12,0,211,37,182,154]
},
{
"kpi" : "NTI",
"data" : [195,299,31,32,438,12,0,6,136,31,71,5,40,40,96,46,4,49,106,127,43,366,23,36,7,34,196,105,30,77]
},
{
"kpi" : "BS",
"data" : [745,2129,1775,1089,517,720,2269,334,1436,517,3219,1167,2286,266,1813,509,1409,988,1511,972,730,2039,1067,1102,1270,1629,845,1292,1107,1800]
},
{
"kpi" : "SISS",
"data" : [75,547,260,430,397,91,0,0,217,105,563,136,352,286,244,166,287,319,877,230,100,437,108,326,145,749,0,92,191,469]
},
{
"kpi" : "MID",
"data" : [6,17,14,8,13,7,4,6,8,5,72,15,6,3,1,13,17,32,9,3,25,21,7,49,23,10,13,18,36,9,12]
}
];
然后您可以在HTML中执行以下操作
<script src="server_data.js"> </script>
function getServerData(kpiCode)
{
var elem = $(window.portalData).filter(function(idx){
return window.portalData[idx].kpi == kpiCode;
});
return elem[0].data;
};
var defData = getServerData('NDAR');
答案 4 :(得分:0)
实际上,您正在寻找AJAX呼叫,您将用JSON文件的链接替换URL参数值以获得JSON值。
$.ajax({
url: "File.json", //the path of the file is replaced by File.json
dataType: "json",
success: function (response) {
console.log(response); //it will return the json array
}
});