我已經從多個地方讀取setTimeout()比setInterval()更適合設置基本上永遠運行。下面的代碼工作正常,但運行Firefox(38.0.1)大約一小時後會拋出too much recursion
的錯誤。jquery setTimeout太多遞歸
本質上,我已經從counts.php中抓取了很少量的文本,並使用該信息更新了一張表。根據檢查人員的整個呼叫和回報大約需要50毫秒。我試圖按照t
的指示每隔x秒做一次。我猜想如果我切換到setInterval()這可能會工作,但我不確定setTimeout()vs setInterval()心態的當前狀態是什麼,因爲我一直在找的所有東西都是關於3- 5歲。
$(document).ready(function() {
t = 3000;
$.ajaxSetup({cache: false});
function countsTimer(t) {
setTimeout(function() {
$.getJSON("counts.php", function (r) {
$(".count").each(function(i,v) {
if ($(this).html() != r[i]) {
$(this).fadeOut(function() {
$(this)
.css("color", ($(this).html() < r[i]) ? "green" : "red")
.html(r[i])
.fadeIn()
.animate({color: '#585858'}, 10000);
})
};
});
t = $(".selected").html().slice(0,-1) * ($(".selected").html().slice(-1) == "s" ? 1000 : 60000);
countsTimer(t);
});
}, t);
};
countsTimer(t);
});
更新:此問題是由.fadeOut()動畫之前添加.stop(真正的,真實的)解決。此問題僅在Firefox中發生,因爲其他瀏覽器中的測試不會導致任何問題。儘管在這種情況下它不是解決方案,但我已經將答案標記爲正確,但它提供了一個更廣義的解釋。
我不知道爲什麼'setInterval'不應該被使用。原因是什麼?聽起來像虛假的聲明或僅在特定情況下相關的原因。 –
林想知道是否清除超時將解決這個問題,即使我真的不知道從哪裏來遞歸 –
@squint,以避免一些問題,如果請求超過延遲完成 –