在WebSQL服务器中存储JSON数据

时间:2015-03-23 10:46:33

标签: javascript json cordova web-sql intel-xdk

我尝试使用.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项目中。

1 个答案:

答案 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();
    }
}