Tôi đã có thanh tiến trình jQueryUI sẽ hiển thị phần trăm truy vấn được thực hiện. Oracle có một bảng hệ thống tốt đẹp cho phép bạn xem các hoạt động sẽ mất hơn 10 giây. Tôi đang cố gắng làm cho các cuộc gọi $ .ajax đáng kinh ngạc đến truy vấn này để làm mới thanh tiến trình.Vòng lặp jQuery AJAX để làm mới jQueryUI ProgressBar
Vấn đề là tôi có thể nhận các vòng lặp để thực hiện các yêu cầu nhanh chóng mà không phải chờ đợi hoặc chỉ trì hoãn toàn bộ JavaScript khi thực thi.
Tôi bắt đầu yêu cầu đầu tiên bằng cách nhấp vào nút "Thực thi" trong hộp thoại jQueryUI.
$("#dlgQuery").dialog({
buttons: {
Execute: function() {
$(this).dialog("close");
StartLoop();
}
}
});
Tôi đang cố gắng để xây dựng một trong hai StartLoop()
chức năng hoặc thực hiện một GetProgress()
hàm đệ quy. Lý tưởng nhất, tôi sẽ có một biến công khai var isDone = false
để hoạt động như chỉ báo của tôi khi nào chấm dứt vòng lặp hoặc dừng đệ quy gọi hàm đó.
Để đơn giản tôi đã chỉ cần thực hiện một vòng lặp tĩnh mà thực hiện 100 lần:
function StartLoop(){
for (var i = 0; i < 100; i++) {
GetProgress();
}
}
và đây là yêu cầu mẫu ajax của tôi:
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;
}
});
}
Vì vậy, những gì tôi đã tìm thấy là, cho đến nay:
setTimeout(GetProgress(), 3000)
trong StartLoop()
đóng băng Javascript và hộp thoại không đóng (tôi giả định, vì nó sẽ đợi cho đến khi truy vấn được thực hiện).
This một, pausecomp(3000)
thực hiện tương tự như vậy.
Nếu tôi gọi một trong hai chức năng này trong chức năng "thành công" của yêu cầu AJAX, nó sẽ bị bỏ qua (có thể vì nó bắt đầu một cuộc gọi không đồng bộ).
Tôi bị mắc kẹt ở đây, mọi trợ giúp sẽ được đánh giá cao, cảm ơn.
câu hỏi thú vị. :) Tôi không thể nghĩ ra một câu trả lời hay. Bạn đã thử sử dụng setInterval chưa? Điều gì đã xảy ra khi bạn thử phương pháp đệ quy? –
Tôi nhận được yêu cầu/phản hồi nhanh. – tedski