2012-11-07 51 views
0

我需要能夠每秒調用一次函數「getProgress」。該函數執行ajax請求並更新進度條。當從ajax返回的調用爲「true」時,我需要能夠停止對此函數的調用。jquery每秒調用一次ajax直到調用完成/返回true

HTML:

<td class="checkbox"> 
<input type="checkbox" value="6" class="checkbox download" id="chk-6"> 
<div class="hide" id="prgbar-6"><span class="progresslabel"></span></div> 
</td> 

我的功能:

function getProgress(operationId) { // receives operationId 
    $.post("@Url.Action("Status","Packages")", { operationId: operationId }, function (data) { 
     if (data) { 
      for (var key in data) { 
       if ($("#prgbar-" + key + "").size() != 0) { 
        var objPrg = $("#prgbar-" + key + ""); 
        var objchk = $("#chk-" + key + ""); 
        if (data[key]) { 
         objPrg.find("span").text("downloading...").css("color:#000000"); 
         objchk.hide(); 
         objPrg.removeClass("hide").show().progressbar({ 
          value: 0 
         }); 
         var value = Math.floor(parseInt(data[key]) * 100); 
         objPrg.progressbar("option", "value", value); 
         objPrg.find("span").text(value + "%"); 
        } else { 

        } 
       } 
      } 
     } 
    }); 
} 
+0

閱讀:http://stackoverflow.com/a/2474601/1414562 –

+0

什麼,我真的問這裏是如何調用該函數每秒和停止調用它時,後返回true。 – ShaneKm

回答

1
var interval = setInterval(function(){getProgress(operationId,interval)},1000); 

在$ .POST完整的回調函數,明確這一區間:{我使用完整的在這裏,但如果你想只爲成功的請求,使用.success()做}

$.post("@Url.Action("Status","Packages")", { operationId: operationId }, function (data) { 
     if (data) { 
      for (var key in data) { 
       if ($("#prgbar-" + key + "").size() != 0) { 
        var objPrg = $("#prgbar-" + key + ""); 
        var objchk = $("#chk-" + key + ""); 
        if (data[key]) { 
         objPrg.find("span").text("downloading...").css("color:#000000"); 
         objchk.hide(); 
         objPrg.removeClass("hide").show().progressbar({ 
          value: 0 
         }); 
         var value = Math.floor(parseInt(data[key]) * 100); 
         objPrg.progressbar("option", "value", value); 
         objPrg.find("span").text(value + "%"); 
        } else { 

        } 
       } 
      } 
     } 
    }).complete(function() { clearInterval(interval); }); 
0

方法1:

你可以只創建一個名爲requestRunning功能之外並調用getProgress它的變量檢查requestRunning是否爲真。

// Pseudo-code 
var requestRunning = false; 
if requestRunning === true => continue with getProgress 
if requestRunning === false => stop firing getProgress 

方法#2:

使用的setInterval和該請求的成功,並清除間隔。

var progressHandle = setInterval(function(){getProgress(id)}, 1000); 

$.ajax({ 
    success: function() { 
    clearInterval(progressHandle); 
    } 
}); 

雖然進度檢查通過以後的AJAX調用是不是真的好,我很可能喜歡第一個選項。

1

我像這種方法一樣。它不需要清除間隔。它只是自行運行,並在必要時設置超時。

var operationId = ...; 
var processFunction = function() { 
     $.post("@Url.Action("Status","Packages")", { operationId: operationId }, function (data) { 
      if (data !== true) { 
       // your normal function stuff 
       setTimeout(processFunction, 1000); 
      } 
     }); 
    }; 

setTimeout(processFunction, 1000);