jquery – HTML5 WebSQL:如何知道db事务何时完成?

前端之家收集整理的这篇文章主要介绍了jquery – HTML5 WebSQL:如何知道db事务何时完成?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码获取一个json记录集,并在客户端Web sql存储上的三个不同的表中插入一些数据.

如何拦截databaseSync()函数的结尾?
我想做的是显示警报或更好的ajax微调GIF,以便在同步完成时通知用户.

非常感谢您的帮助,
再见!

function databaseSync() {

        // table one
        $.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.PHP?ACT=one",function(json) {
            $.each(json.results,function(i,res) {
                db.transaction(function(tx) {
                    tx.executesql("INSERT INTO table1 (A,B,C,D) VALUES (?,?,?) ",[res.A,res.B,res.C,res.D],onSuccess,onError);
                });
            });
        });

        // table two
        $.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.PHP?ACT=two",onError);
                });
            });
        });

        // table three
        $.getJSON("http://192.168.1.40:8888/iOS/mobilesrv/index.PHP?ACT=three",onError);
                });
            });
        });


    }

解决方法

好的,这是我的第五个修订,但我喜欢这个问题,我不断提出更好的想法.这个使用了 jquery deferred objects,我认为它终于涵盖了所有的案例,并以它应该的方式工作.
function tableInsert(url) {
    var dfd = $.Deferred();
    var arr = [];
    $.getJSON(url,function(json) {
        $.each(json.results,res) {
            var dfd = $.Deferred();
            arr.push(dfd.promise()); 
            db.transaction(function(tx) {
                tx.executesql(
                    "INSERT INTO table1 (A,function(){
                        onSuccess(dfd.resolve);
                    },function(){
                        onError(dfd.resolve);
                    }
                );
            });
        });
        $.when.apply(this,arr).then(dfd.resolve);
    });
    return dfd.promise();
}

function databaseSync() {

    $.when( tableInsert("http://192.168.1.40:8888/iOS/mobilesrv/index.PHP?ACT=one"),tableInsert("http://192.168.1.40:8888/iOS/mobilesrv/index.PHP?ACT=two"),tableInsert("http://192.168.1.40:8888/iOS/mobilesrv/index.PHP?ACT=three"))
        .then(function(){
            console.log( 'All processing complete' );
        });
}

为了使这个工作,您需要更改onSuccess和onError,在执行其他任何操作之后执行resolve函数作为回调函数,然后这将适用于您.我希望你觉得这很有用.

猜你在找的jQuery相关文章