我正在下订单,并将订单信息存储在JSON文件(order_details.json
)中。这就是数据的样子:
[{
"uniqueID": "CHECKOUT_IE01",
"orderID": "4001820182",
"date": "06-02-2019 16:55:32.321",
"cartTotal": "€19.98"
}, {
"uniqueID": "CHECKOUT_DK01",
"orderID": "6001825057",
"date": "06-02-2019 16:56:15.976",
"cartTotal": "318 DKK"
}]
现在我想制作一个HTML报告,在其中我可以获取所有这些数据并可以html格式显示。
不知道我必须使用哪种技术。到目前为止,我尝试过的是创建如下的js代码:
var fs = require(['fs']);
var data = fs.readFileSync("D:\\order-detail.json", "utf8");
var data1 = JSON.parse(data);
console.log(data1);
var unique_id = data1[0].uniqueID;
var order_id = data1[0].orderID;
var order_date = data1[0].date;
var cart_total = data1[0].cartTotal;
document.getElementById("uid").innerHTML = unique_id;
document.getElementById("oid").innerHTML = order_id;
document.getElementById("date").innerHTML = order_date;
document.getElementById("ctotal").innerHTML = cart_total;
和HTML
<body onload="myFunction()">
<h3>Values from Json</h3>
<div>
<span id="uid"></span>
<span id="oid"></span>
<span id="date"></span>
<span id="ctotal"></span>
</div>
但是它不起作用,我在控制台中遇到错误-
dashboard.html:8 Uncaught TypeError: fs.readFileSync is not a function
at myFunction (dashboard.html:8)
at onload (dashboard.html:25)
myFunction @ dashboard.html:8
onload @ dashboard.html:25
require.js:5 GET file:///D:/JSON/fs.js net::ERR_FILE_NOT_FOUND
req.load @ require.js:5
load @ require.js:5
load @ require.js:5
fetch @ require.js:5
check @ require.js:5
enable @ require.js:5
enable @ require.js:5
(anonymous) @ require.js:5
(anonymous) @ require.js:5
each @ require.js:5
enable @ require.js:5
init @ require.js:5
(anonymous) @ require.js:5
setTimeout (async)
req.nextTick @ require.js:5
o @ require.js:5
requirejs @ require.js:5
myFunction @ dashboard.html:7
onload @ dashboard.html:25
require.js:5 Uncaught Error: Script error for "fs"
http://requirejs.org/docs/errors.html#scripterror
at makeError (require.js:5)
at HTMLScriptElement.onScriptError (require.js:5)
我不确定发生了什么问题或使用的方式有误。任何帮助将不胜感激
答案 0 :(得分:1)
我认为您正在将Node
与普通的浏览器JavaScript混合使用。普通的JavaScript没有require
的定义,因为它是因为您正在使用的另一个库已声明它不会满足您的期望。从浏览器加载数据的最简单方法是使用XMLHttpRequest
,下面是一个示例:
loadURL("file:///D:/order-detail.json", onDataLoaded);
function onDataLoaded(data) {
data = JSON.parse(data);
var unique_id = data[0].uniqueID;
var order_id = data[0].orderID;
var order_date = data[0].date;
var cart_total = data[0].cartTotal;
document.getElementById("uid").innerHTML = unique_id;
document.getElementById("oid").innerHTML = order_id;
document.getElementById("date").innerHTML = order_date;
document.getElementById("ctotal").innerHTML = cart_total;
}
function loadURL(url, callBack) {
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader("Accept", "application/json");
xhr.onloadend = onLoadEnd(xhr, callBack);
xhr.send();
}
function onLoadEnd(request, callBack) {
return function() {
var status = request.status;
var result = String(request.response);
if (status >= 200 && status < 300) callBack(result);
};
}
由于安全原因,某些浏览器(例如Chrome)可能会阻止该请求。要解决此问题,请尝试将JSON文件添加到IIS(然后将file://D:\\order-detail.json
更改为localhost/addPathHere/order-detail.json
)。
这是simple tutorial,用于激活本地IIS服务器(假设您使用的是Windows)。
答案 1 :(得分:1)
这应该有效。
用您的json文件路径替换 ./ JSON / order-detail.json 。
$.getJSON('./data.json', function(item) {
item.forEach(function(data) {
return [
document.getElementById("uid").innerHTML += data.uniqueID + "</br>",
document.getElementById("oid").innerHTML += data.orderID + "</br>",
document.getElementById("date").innerHTML += data.date + "</br>",
document.getElementById("ctotal").innerHTML += data.cartTotal + "</br>"
];
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>Values from Json</h3>
<div>
<span id="uid"></span>
<span id="oid"></span>
<span id="date"></span>
<span id="ctotal"></span>
</div>
答案 2 :(得分:0)
您正在客户端JavaScript中使用NodeJS
模式。在前端,您可以直接使用JSON
导入jQuery
文件。
$(function(){
$.getJSON('order-detail.json',function(data){
$.each(data,function(i,order){
//your implementation here..
// Can access data like order.uniqueID , order.orderID
});
}).error(function(){
console.log('error');
});
});
.json 文件应该可以在您的域下访问,例如
CSS,JS,Image resources
。您无法使用完整路径访问,例如C:\yourpath\file.json