Javascript WebSQL-在事务中丢失

Javascript WebSQL-在事务中丢失,javascript,android,web-applications,web-sql,Javascript,Android,Web Applications,Web Sql,我正在使用WebSQL和IndexedDB开发一个web应用程序。IndexedDB在支持它的浏览器中运行良好,我的WebSQL实现在大多数浏览器中都能运行,但是在Android上,javascript的执行似乎在db.transaction中停止 这是我的密码。在“启动事务…”之后,我没有收到任何控制台日志(并且似乎没有执行更多的JS) window.store.getFile=函数(文件名,回调){ var db=window.store.websql.db; console.log('启动

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

这是我的密码。在“启动事务…”之后,我没有收到任何控制台日志(并且似乎没有执行更多的JS)

window.store.getFile=函数(文件名,回调){
var db=window.store.websql.db;
console.log('启动事务…');
数据库事务(功能(tx){
var filename2=文件名;
变量查询='从文件中选择*,其中filename=“”+filename+”;
log('执行查询:'+查询);
tx.executeSql(查询,[],函数(t,r){
如果(r.rows.length>0){
var len=r.行数.长度,i;
对于(i=0;i

(顺便说一句,我也欢迎对我的代码提出任何批评…

您正在追踪的错误可能是在db级错误处理程序(在openDatabase中传递)上引发的。一些android手机不接受null或未定义的错误处理程序,症状如您所述。没有错误,没有成功,什么都没有

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


另外:请注意,成功处理程序的返回值(false/true)将确定抛出错误时发生的情况(回滚或不回滚的仅错误)。

您正在跟踪的错误可能在db级错误处理程序(在openDatabase中传递)上引发。一些android手机不接受null或未定义的错误处理程序,症状如您所述。没有错误,没有成功,什么都没有

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


另外:请注意,success handler的返回值(false/true)将确定抛出错误时发生的情况(回滚或不回滚的错误)。

噢,我理解查询的sql注入潜力。。。我最终将把
filename
作为参数传递给executeSql。没有接收到tx是奇怪的。成功打开数据库了吗?是的,数据库已打开,并且表已正确创建。另外,正如我提到的,这在其他浏览器上似乎也很好。只有Android(股票浏览器、Chrome和Dolphin)才有问题哦,我理解查询的sql注入潜力。。。我最终将把
filename
作为参数传递给executeSql。没有接收到tx是奇怪的。成功打开数据库了吗?是的,数据库已打开,并且表已正确创建。另外,正如我提到的,这在其他浏览器上似乎也很好。只有安卓系统(股票浏览器、Chrome和Dolphin)有问题,我肯定会接受这个答案,因为所有指标都指向这个方向。我无法确认它,但在我重新编写了一些代码(包括openDatabase错误处理程序)后,它就消失了。这当然是一个奇怪的问题,因为Android的控制台日志上没有抛出任何错误,奇怪的是,在这之前,is一直在执行其他Javascript。我的怀疑是,openDatabase代码的某些部分被推迟到事务建立时,也就是事情变得不正常的时候。谢谢你给我一个好主意去哪里找!!我肯定会接受这个答案,因为所有指标都指向这个方向。我无法确认它,但在我重新编写了一些代码(包括openDatabase错误处理程序)后,它就消失了。这当然是一个奇怪的问题,因为Android的控制台日志上没有抛出任何错误,奇怪的是,在这之前,is一直在执行其他Javascript。我的怀疑是,openDatabase代码的某些部分被推迟到事务建立时,也就是事情变得不正常的时候。谢谢你给我一个好主意去哪里找!!
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...');
};