用ajax jQuery进行sqlite查询?

I have a problem with using sqlite queries within back getJSON response function in my phonegap app.

I tried to apply this code and all I have is the error

INVALID_STATE_ERR: DOM Exception 11: An attempt was made to use an object that is not, or is no longer, usable.

my code is

<script>
     document.addEventListener("deviceready", onDeviceReady, false);
     function onDeviceReady() {
        // open DB connection
         var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
         db.transaction(populateDB, errorCB, successCB);
    }

    function populateDB(tx) {

         tx.executeSql('DROP TABLE IF EXISTS buses');
         tx.executeSql('CREATE TABLE IF NOT EXISTS buses (bus_id INTEGER PRIMARY KEY,bus_no TEXT, bus_time TEXT,from_loc TEXT,to_loc TEXT,route TEXT)');
         $.getJSON('http://myegy.me/maryam/asem/api.php?table=trip', function(data) {
              $.each(data, function(key, val) {

                    tx.executeSql('INSERT INTO buses (bus_no,from_loc,to_loc,route) VALUES ("'+val['trip_number']+'","'+val['from_id']+'","'+val['to_id']+'","'+val['stop_station']+'")');
              });
            });

         tx.executeSql('DROP TABLE IF EXISTS bus_stations');
         tx.executeSql('CREATE TABLE IF NOT EXISTS bus_stations (id INTEGER PRIMARY KEY,station_name TEXT, station_description TEXT,station_lat TEXT,station_long TEXT)');
         $.getJSON('http://myegy.me/maryam/asem/api.php?table=station', function(data) {
              $.each(data, function(key, val) {

                    tx.executeSql('INSERT INTO bus_stations (station_name,station_lat,station_long) VALUES ("'+val['station_name']+'","'+val['latitude']+'","'+val['longitude']+'")');
              });
            });

    }

    </script>

the problem in these two lines

 tx.executeSql('INSERT INTO buses (bus_no,from_loc,to_loc,route) VALUES ("'+val['trip_number']+'","'+val['from_id']+'","'+val['to_id']+'","'+val['stop_station']+'")');

and

tx.executeSql('INSERT INTO bus_stations (station_name,station_lat,station_long) VALUES ("'+val['station_name']+'","'+val['latitude']+'","'+val['longitude']+'")');

You have to move the $.getJSON statements to the successCB function, and I also would suggest to pass the json data as a parameter to a function that processes the data as a db.transaction.

function successCB() {
    $.getJSON('http://myegy.me/maryam/asem/api.php?table=trip', function (data) {
        setBuses(data);
    }
}

function setBuses(data) {
    this.db.transaction(
        function (tx) {
            var l = data.length;
            var sql = 'INSERT INTO buses (bus_no,from_loc,to_loc,route) VALUES (?,?,?,?)';
            var b;
            for (var i = 0; i < l; i++) {
                b = data[i];
                var params = [b.trip_number,b.from_id,b.to_id,b.stop_station];
                tx.executeSql(sql, params);
            }
        },
        errorCB,
        function () {}
    );
}

I suggest you read the article of June 2012 of Appliness (http://www.appliness.com/download/), called 'Offline Data Synchronization' written by Christophe Coenraets.