我尝试使用.getJSON()和.each将我的JSON数据加载到webSQL服务器中,以便通过数据库中的记录进行迭代。
function createDB(){
var db = openDatabase('Json', '1.0', 'local version of Json db', 2 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE categorie (categorie_id INTEGER, cat_naam TEXT)');
$.getJSON("http://localhost:8080/Json/welcome/categorie", function(data){
$.each(data, function(index) {
console.log(data[index].categorie_id);
tx.executeSql('INSERT INTO categorie (categorie_id, cat_naam) VALUES (?,?)', [data[index].categorie_id, data[index].cat_naam]);
});
});
});
}
但是在id写入日志之后,javascripts停止运行。
我不知道我做错了什么,根据我读过的一些文档和教程,我应该做的语法很好,但也许这与我&#39的事实有关。 ; m将这两个函数(.getJson和.each)与事务结合使用。
此应用程序也在使用AppFramwork和Cordova的英特尔XDK项目中。
答案 0 :(得分:0)
您的问题是您正在尝试同步执行多个数据库操作。 DB API异步工作,因此您需要使用回调来确保在开始下一个操作之前完成上一个操作。我会尝试这样做:
function createDB(){
var db = openDatabase('Json', '1.0', 'local version of Json db', 2 * 1024 * 1024);
var jsonData;
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE categorie (categorie_id INTEGER, cat_naam TEXT)', [], getJson);
});
function getJson(){
$.getJSON("http://localhost:8080/Json/welcome/categorie", function(data){
jsonData = data;
db.transaction(function (tx) {
doInsert(function(){
console.log("DB inserts complete");
}, tx);
});
});
}
function doInsert(onSuccess, tx){
if(jsonData.length > 0){
var data = jsonData.shift();
console.log(data.categorie_id);
tx.executeSql('INSERT INTO categorie (categorie_id, cat_naam) VALUES (?,?)', [data.categorie_id, data.cat_naam], doInsert.bind(this, onSuccess));
}else{
onSuccess();
}
}