0

sqlite でデータベースから情報を照会しているときに、読み込み中のメッセージを表示したいと考えています。これが私がこれまでに持っているものです:

    $.mobile.showPageLoadingMsg("a", "Updating Distributor List...", true);
    $.ajax({ 
        type: "POST",
        cache: false,
        url: "https:xxxx.php",
        data: { lastUpdated: lastUpdated, section: 'distributors'},
        dataType: "json",
        success: function(result){
                $.each(result.response, function(i, val) {
                    db.transaction(function(ctx) {
                        ctx.executeSql("SELECT ID FROM distributors WHERE token = '"+val.ID+"' ", [], function(tx,checkres) { //select all from phoneDB 
                            if(checkres.rows.length) {
                                    tx.executeSql("update distributors set distributorName='"+val.distributorName+"',address='"+val.address+"',postcode='"+val.postcode+"',phone='"+val.phone+"',email='"+val.email+"',lastUpdated='"+val.lastUpdated+"' WHERE token='"+val.ID+"'", []);
                            } else {
                                if(val.deleted != "1") {
                                    tx.executeSql("INSERT INTO distributors(distributorName,address,postcode,phone,email,lastUpdated,token) VALUES('"+val.distributorName+"','"+val.address+"','"+val.postcode+"','"+val.phone+"','"+val.email+"','"+val.lastUpdated+"','"+val.ID+"')", []);
                                }
                            }
                        });
                    });
                });     
            $.mobile.hidePageLoadingMsg();                      
        }
    })

したがって、これは AJAX クエリを起動します。私の最初の考えは、読み込み中のメッセージを前に表示し、成功が完了した後に非表示にすることでした。しかし...成功コールバック内には、完了するまでに最大15秒かかる別のローカルデータベースクエリがあります。これも非同期であるため、読み込みメッセージはこれらのクエリが完了するまで待機する必要があります。

また、これらの ajax クエリが 3 つまたは 4 つあり、すべてほとんど同じことを行っているため、現在どの ajax 成功コールバックにいるかによって、読み込みメッセージが変わります。

これが理にかなっていることを願っています。

4

1 に答える 1

0

ここに簡単なアイデアがあります。4つのgloabal変数を設定します。それらの値をfalseに設定します。

最初の外部クエリが完了したら、最初のグローバル変数の値をtrueに設定し、進行状況インジケーターを停止する関数を呼び出します。

この関数は、すべてのグローバル変数がtrueに設定されている場合にのみ、進行状況インジケーターを停止します。

したがって、4つの内部ajax呼び出しがすべて完了すると、この関数は進行状況インジケーターを停止します。

javascriptでグローバル変数を設定する方法を知っているといいのですが

function someFunction(){
    this.firstIndicator=false;
    this.secondIndicator=false;
}

次に、関数someFunction.firstIndicatorを呼び出すことができます

于 2013-03-07T04:47:40.800 に答える