【发布时间】:2018-11-27 10:17:03
【问题描述】:
我进行了很多研究,但没有找到适合我的方案的解决方案。我有一个简单的 html/javascript 应用程序,我使用 cordova 打包它。 html 页面有一个表单,可以将表单发布到服务器。当应用程序离线或没有可用的互联网连接时,我想将表单保存到 sqlite 数据库。 我是 sqlite 的新手,我还没有找到任何兼容的数据类型来将表单存储到数据库。如果我使用 TEXT 或 BLOB,它只存储“[Object HTMLFormObject]”字符串。
请检查我的js代码:
db = window.sqlitePlugin.openDatabase({
name: 'ambdb',
location: 'default'
}, function (db) {
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS FORMS (form BLOB)');
}, function (err) {
alert('Open database ERROR: ' + JSON.stringify(err));
});
});
function storeForms(formRecieved) {
//alert(formRecieved.toString());
//alert('text(): '+ formRecieved.text());
//var jsonString = JSON.stringify(formRecieved);
//var htmlText = escape(formRecieved.innerHTML);
//var htmlText = formRecieved.innerHTML;
//var simplyString = String(formRecieved);
db.transaction(function (tx) {
tx.executeSql('INSERT INTO FORMS (form) VALUES (?)', [formRecieved]);
}, function (err) {
alert('StoreForms ERROR: ' + JSON.stringify(err));
});
}
function readForms(cb) {
var submittedForms = [];
db.transaction(function (tx) {
tx.executeSql('SELECT form FROM FORMS', [], function (tx, results) {
alert('total items: ' + results.rows.length);
for (var i = 0; i < results.rows.length; i++) {
var row = results.rows.item(i)['form'];
//row = JSON.parse(row);
/*var varstring = row.toString();
alert('tostring: ' + varstring);
var parser=new DOMParser();
var x = parser.parseFromString(varstring, "text/html");
alert('x: '+ x);*/
submittedForms.push(row);
}
cb.call(this, submittedForms);
});
});
}
document.addEventListener("online", function (e) {
alert('I am online');
isConnected = true;
var promise1 = new Promise(function (resolve, reject) {
readForms(function (forms) {
resolve(forms);
});
}).then(function (submittedForms) {
var numberOfRows = submittedForms.length;
alert('submittedForms.length: ' + numberOfRows);
if (numberOfRows > 0) {
for (var i = 0; i < numberOfRows; i++) {
alert('Single row: '+ JSON.stringify(submittedForms[i]));
submittedForms[i].submit();
}
//deleteForms();
return false;
}
})
}, false);
注释代码显示了我尝试来回序列化解析 HTML 对象以将其存储在数据库中的可能方式。 请指导我应该使用哪种列数据类型以及如何在代码中处理它。非常感谢!
【问题讨论】:
-
你在保存之前试过 JSON.stringfy 吗?
-
是的,我有 :( 但是在读取操作期间我必须解析它,例如 row = JSON.parse(row); 这会将它转换为一个对象,然后我很难转换这个对象到 HTMLformObject.
-
遇到什么困难?
标签: javascript sqlite cordova cordova-plugins