1

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

我尝试将 tx.executeSql 包装在 db.transaction 中(在 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);
    });

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

谢谢你们!

4

1 回答 1

0

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

尝试在 onError 回调中记录错误

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

可能会发生另一个错误,阻止数据写入数据库。

于 2013-06-18T09:31:07.003 回答