我有以下代码获取一个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函数作为回调函数,然后这将适用于您.我希望你觉得这很有用.