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 に答える