(我查看了所有类似的问题/答案,但没有一个能解决我的问题。)
编码:
var timeoutHandle;
function showLoader(show) {
if (show) {
$('.loader').html('Loading...');
$('.loader').show();
timeoutHandle = setTimeout(function () {
if ($('.loader').is(':visible')) {
$('.loader').html('Still loading...');
}
}, 15000);
}
else {
$('.loader').hide();
clearTimeout(timeoutHandle);
}
}
AJAX函数只是在调用服务器之前先调用
showLoader(true)
,然后在结果之后调用showLoader(false)
。我有时仍会看到文本在15秒之前从“正在加载...”更改为“仍在加载...”,因此就好像计时器线程仍在运行。上面的代码有什么问题吗?或者问题可能出在其他代码上。编辑:我必须补充一点,在服务器响应之前,可以再次(反复)调用
showLoader(true)
最佳答案
在创建新的timeoutHandle
之前,您应该添加一项检查以查看是否已经存在timeoutHandle
。
试试这个:
if(timeoutHandle){
clearTimeout(timeoutHandle);
timeoutHandle = null;
}
timeoutHandle = setTimeout(function () {
if ($('.loader').is(':visible')) {
$('.loader').html('Still loading...');
}
}, 15000);
然后在其他情况下,将其清除后将
showLoader(true)
设置为null,如下所示:clearTimeout(timeoutHandle);
timeoutHandle = null;
如果ojit_code函数被多次调用,这将消除您创建并发超时的机会。