【问题标题】:SQlite database with PhoneGap and JavaScript带有 PhoneGap 和 JavaScript 的 SQlite 数据库
【发布时间】:2013-02-01 09:30:03
【问题描述】:

我正在使用 PhoneGap 和 SQLite 数据库。

我尝试这样的事情:

我有一个函数 useSavedThing():

function useSavedThing() {

        alert("BEFORE getSavedThing()");    

    getSavedThing();

        alert("AFTER getSavedThing()");

}

还有一个函数getSavedThing():

function getSavedThing(){

        alert("ONE");
        var db = window.openDatabase("Database", "1.0", "Database", 200000);
    db.transaction(populateDB, errorCB, successCB);
        alert("TWO");
    function populateDB(tx) {

        alert("THREE");
    }

    function errorCB(tx, err) {
        alert("Error processing SQL: " + err);
    }

    function successCB() {
        alert("FOUR");
        db.transaction(getData);
    }

    function getData(tx) {
                alert("FIVE");
        tx.executeSql('SELECT * FROM SETTINGS', [], getIt, errorCB);
    }
    function getIt(tx, results) {
                   alert("SIX");
            var savedthing = results.rows.item(0).data;


    }



}

问题是当函数 getSavedThing() 被调用时,只有前两个警报 (alert("ONE"), alert("TWO)) 发出但随后警报 ("AFTER getSavedThing ()") 被调用。

但我希望所有费用警报(“ONE”),警报(“TWO”),警报(“THREE”)警报(“FOUR”)警报(“FIVE”),警报(“SIX”),发出在警报之前("AFTER getSavedThing()");应用程序。

警报的顺序应该是:

  1. alert("BEFORE getSavedThing()");
  2. alert("ONE");
  3. 警报(“两个”);
  4. 警报(“三”);
  5. 警报(“四”);
  6. 警报(“五”);
  7. 警报(“六”);
  8. alert("BEFORE getSavedThing()");

有人可以帮我吗?

【问题讨论】:

  • 你能告诉我们任何 firebug 或类似的输出吗?我假设 getSavedThing() 中的函数应该在它之外。

标签: javascript html sqlite cordova


【解决方案1】:

数据库操作是异步执行的。如果要在最后一次数据库操作之后执行alert("AFTER getSavedThing()"),则需要从回调函数getIt()中调用;

function useSavedThing() {
    alert("BEFORE getSavedThing()");
    var afterGet = function(){
        alert("AFTER getSavedThing()");
    }
    getSavedThing( afterGet ); /*pass the callback function to getSavedThing*/
}

function getSavedThing( callback ){

    alert("ONE");
    var db = window.openDatabase("Database", "1.0", "Database", 200000);
    db.transaction(populateDB, errorCB, successCB);
    alert("TWO");
    function populateDB(tx) {
        alert("THREE");
    }

    function errorCB(tx, err) {
        alert("Error processing SQL: " + err);
    }

    function successCB() {
        alert("FOUR");
        db.transaction(getData);
    }

    function getData(tx) {
        alert("FIVE");
        tx.executeSql('SELECT * FROM SETTINGS', [], getIt, errorCB);
    }

    function getIt(tx, results) {
         alert("SIX");
         var savedthing = results.rows.item(0).data;
         callback.call(); /*execute the callback function*/
    }
}

【讨论】:

  • 就是这样!这就是你使用stackoverflow的原因:-)喜欢它!非常感谢!
【解决方案2】:

您可以在PhoneGap中使用this framework进行数据访问,您会发现它非常好用:

var db = new MyDB();
//query all users
var users = db.Users.toArrary(callback);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多