首先,我必须说我已经检查了与我的问题相关的其他stackoverflow问题,但事实证明他们都没有帮助我。这只是我发布此内容的原因。
我制作了这款小巧的phonegap / cordova应用程序:
index.html:
<html>
<head>
<title>NFC tag ID reader</title>
</head>
<body style="font-size: 1.4em;">
<div class="app">
<div id="messageDiv"></div>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript">
app.initialize();
</script>
</body>
</html>
js / index.js:
var app = {
/*
Application constructor
*/
initialize: function() {
this.bindEvents();
console.log("Starting NFC Reader app");
},
/*
bind any events that are required on startup to listeners:
*/
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
/*
this runs when the device is ready for user interaction:
*/
onDeviceReady: function() {
nfc.addTagDiscoveredListener(
app.onNfc, // tag successfully scanned
function (status) { // listener successfully initialized
app.display("Bonjour, veuillez vous identifier.");
},
function (error) { // listener fails to initialize
app.display("NFC reader failed to initialize " +
JSON.stringify(error));
}
);
},
/*
displays tag ID from @nfcEvent in message div:
*/
onNfc: function(nfcEvent) {
var tag = nfcEvent.tag;
var nfcUid = nfc.bytesToHexString(tag.id);
var myDb = {
"048574220e2a80": {
"name": "name1",
"firstname": "fname1",
"societe": "agency1"
},
"04ddfd12872a80": {
"name": "name2",
"firstname": "fname2",
"societe": "agency2"
},
"04d0fd12872a80": {
"name": "name3",
"firstname": "fname3",
"societe": "agency3"
}
};
app.display(myDb[nfcUid].name + ' ' + myDb[nfcUid].firstname + ' travaille chez : ' + myDb[nfcUid].societe);
},
/*
appends @message to the message div:
*/
display: function(message) {
var label = document.createTextNode(message),
lineBreak = document.createElement("br");
messageDiv.appendChild(lineBreak); // add a line break
messageDiv.appendChild(label); // add the text
},
/*
clears the message div:
*/
clear: function() {
messageDiv.innerHTML = "";
}
}; // end of app
有趣的是onNFC功能等待NFC标签,然后在屏幕上显示与uid标签对应的人的名字(首先通过检查json数据库)。这样,数据不会存储在标记中,而是直接存储在json文件中。
我想要的是使用相同的结构,但使用index.js文件中的json文件。这就是我遇到问题的地方......
我的index.html没有改变,我刚刚创建了一个这样的db.json文件:
{
"048574220e2a80": {
"name": "name1",
"firstname": "fname1",
"societe": "agency1"
},
"04ddfd12872a80": {
"name": "name2",
"firstname": "fname2",
"societe": "agency2"
},
"04d0fd12872a80": {
"name": "name3",
"firstname": "fname3",
"societe": "agency3"
}
我的/js/index.js文件中的更改是onNFC函数,但我不知道如何访问db.json文件,然后执行与以前相同的操作。我尝试了几种方法,比如使用jquery或使用JSON.parse,但它们都不适用于我。
任何想法的人?
由于
答案 0 :(得分:1)
我遇到了同样的问题。要阅读您的文件,请使用JSON.parse(string)
。它会将您的string
数据转换为object
。
答案 1 :(得分:0)
我对cordova了解不多,我不确定你要做什么,但你可以使用cordova api读取文件,如下所述:http://cordova.apache.org/docs/en/2.5.0/cordova_file_file.md.html
如果您正在阅读的是JSON,您可以随时将其内容传递给 JSON.parse 函数,该函数将返回本机javascrip对象。请注意,json内容是有效的JSON,否则JSON.parse将失败。
答案 2 :(得分:0)
我不完全了解您的问题,但以下代码和说明可能会对您有所帮助,
var data = {
"048574220e2a80": {
"name": "name1",
"firstname": "fname1",
"societe": "agency1"
},
"04ddfd12872a80": {
"name": "name2",
"firstname": "fname2",
"societe": "agency2"
},
"04d0fd12872a80": {
"name": "name3",
"firstname": "fname3",
"societe": "agency3"
}};
alert(data['048574220e2a80']['name']);
alert(data['048574220e2a80']['firstname']);
alert(data['048574220e2a80']['societe']);
动态生成的数据是否会抛出AJAX或静态并在开始时就知道了?
如果它是静态的,你可以把它作为静态数据放在js中。