0

我正在使用 WebSQL 和 IndexedDB 开发一个网络应用程序。IndexedDB 在支持它的浏览器中运行良好,我的 WebSQL 实现在大多数浏览器中运行,但是在 Android 上,javascript 执行似乎在db.transaction.

这是我的代码。在“启动事务......”之后我没有收到任何控制台日志(并且似乎没有进一步的 JS 执行)。

window.store.getFile = function( filename, callback ) {
    var db = window.store.websql.db;
    console.log('Initiating transaction...');
    db.transaction(function (tx) {
        var filename2 = filename;
        var query = 'SELECT * FROM file WHERE filename = "'+filename+'"';
        console.log('Executing query:'+query);
        tx.executeSql(query, [], function(t, r) {
            if ( r.rows.length > 0 ) {
                var len = r.rows.length, i;
                for (i = 0; i < len; i++) {
                    var filename = r.rows.item(i).filename;
                    var data = r.rows.item(i).data;
                    if ( callback ) callback( true, filename2, data );
                    break; // Break here as only one result should be returned
                }
            } else {
                if ( callback ) callback( false, filename2, null );
            }
        }, function(t, e) {
            console.log(e);
            if ( callback ) callback( false, filename2, null );
        });
    }, function(e) {
        console.log('Database transaction error: '+e);
        if ( callback ) callback( false, filename, null );
    }, function() {
        console.log('Transaction success');
    });
    console.log('Transaction initiated...');
};

(PS 我也欢迎对我的代码提出任何批评......)

4

1 回答 1

3

您正在追逐的错误可能是在 db 级别的错误处理程序上引发的(在 openDatabase 中传递)。一些 android 手机只是不接受该错误处理程序的 null 或 undefined ,症状就是您所描述的。没有错误,没有成功只是什么都没有......

另外:您的成功块应该在 try/catch 中,以防止该错误自动冒泡。

另外:请注意,成功处理程序的返回值 (false/true) 将确定抛出错误时会发生什么(回滚或只是没有回滚的错误)。

于 2013-04-08T07:01:30.477 回答