Phonegap - 在ajax调用中运行executeSql会导致INVALID_STATE_ERROR

时间:2013-03-29 16:00:00

标签: ajax cordova jsonp

我正在开展一个项目,我从我的服务器数据库中获取特定用户,并将用户数据插入本地电话数据库。我在事务中使用ajax(jsonp)请求执行此操作(请参阅代码)。如果我运行此代码,它将给我一个INVALID_STATE_ERROR。

我已经尝试在db.transaction中包装tx.executeSql(在ajax调用成功的情况下)这摆脱了INVALID_STATE_ERROR但它不会插入任何数据。

帮助!

交易代码:

db.transaction(function(tx)
    {
        tx.executeSql('DROP TABLE IF EXISTS userdata');
        tx.executeSql('CREATE TABLE IF NOT EXISTS userdata (id INTEGER PRIMARY_KEY, name)');

        $.ajax({
            url: 'http://[myserver]/getUser.php',
            type: 'get',
            data: {'user': enteredUser, 'pass': enteredPass},
            dataType: 'jsonp',
            contentType: "application/json",
            jsonpCallback: 'getUser',
            /*async: false,*/
            timeout: 5000,
            success: function(data, status) {

                //alert(data.name);

                    tx.executeSql('INSERT INTO userdata (id, name) VALUES (' + data.id + ', "' + data.name + '")');



            },
            error: function(a, b, c){

               alert('Update Failed: ' + a.status);
               alert('Update Failed: ' + c);
            }
        });

    }, 
    onNoUser,
    function()
    {
        db.transaction(checkLogin, showLogin);
    });

如果需要更多代码或信息,请告诉我们!

谢谢大家!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题(“InvalidStateError”)但是在AJAX回调中创建一个新事务解决了我的问题。将数据插入数据库也可以正常工作。

尝试在onError回调中记录错误

tx.executeSql(sqlStatement, dataArray, onSuccess, function(tx, err) {
    console.log(err.message);
});

可能会发生另一个错误,导致数据无法写入数据库。