我有一個jQueryUI進度條,應該顯示完成查詢的百分比。 Oracle有一個很好的系統表,可以讓你看到需要10秒以上的操作。我試圖對這個查詢進行交錯的$ .ajax調用,以刷新進度條。jQuery AJAX循環刷新jQueryUI ProgressBar
問題是,我可以在沒有任何等待時間的情況下讓循環快速啓動請求,也可以延遲整個JavaScript執行的時間。
我通過在jQueryUI對話框中單擊我的「執行」按鈕來啓動第一個請求。
$("#dlgQuery").dialog({
buttons: {
Execute: function() {
$(this).dialog("close");
StartLoop();
}
}
});
我試圖建立無論是StartLoop()
功能或進行遞歸GetProgress()
功能。理想情況下,我將有一個公共變量var isDone = false
作爲我何時終止循環或停止遞歸調用函數的指示器。
爲了簡單起見,我剛剛作出了一個靜態的循環執行100次:
function StartLoop(){
for (var i = 0; i < 100; i++) {
GetProgress();
}
}
這是我的樣品Ajax請求:
function GetProgress() {
$.ajax({
url: "query.aspx/GetProgress",
success: function (msg) {
var data = $.parseJSON(msg.d);
$("#pbrQuery").progressbar("value", data.value);
//recursive?
//GetProgress();
//if (data.value == 100) isDone = true;
}
});
}
所以我發現的是,到目前爲止:
setTimeout(GetProgress(), 3000)
in StartLoop()
凍結Javascript,並且對話框沒有關閉(我假設,因爲它會一直等到查詢完成)。
This one,pausecomp(3000)
做了很多相同的事情。
如果我在我的AJAX請求的「成功」函數中調用其中之一,它會被忽略(可能是因爲它正在異步啓動另一個調用)。
我有點卡在這裏,任何幫助將不勝感激,謝謝。
有趣的問題。 :)我想不出一個好的答案。你有沒有嘗試過使用setInterval?當你嘗試遞歸方法時發生了什麼? – 2012-03-02 22:05:05
我得到速射請求/迴應。 – tedski 2012-03-02 22:15:39