我决定将这段代码包含在一个对象中,以将其与要应用的区域分开。非常感谢这里的任何建议:
appConfig.loadElement和appConfig.cerrorElement是以下HTML元素:
<div id="loading" style="display:none;">Loading...</div>
<div id="cerror" style="display:none;">Connection Error.</div>
var loadingTimeoutInstance = null, cerrorTimeoutInstance = null,
requestObj = {
reset: function() {
$(appConfig.loadElement).hide();
$(appConfig.cerrorElement).hide();
clearTimeout(loadingTimeoutInstance);
clearTimeout(cerrorTimeoutInstance);
},
initiate: function() {
loadingTimeoutInstance = setTimeout(requestObj.timeout, appConfig.loadingDelayMS);
},
timeout: function () {
clearTimeout(loadingTimeoutInstance);
$(appConfig.loadElement).show();
cerrorTimeoutInstance = setTimeout(requestObj.cerror, appConfig.cerrorDelayMS);
},
cerror: function () {
clearTimeout(cerrorTimeoutInstance);
$(appConfig.loadElement).hide();
$(appConfig.cerrorElement).show();
}
}
一个实现是这样的:
发出异步请求时:
requestObj.reset();
requestObj.initiate();
返回响应后:
requestObj.reset();
我确定的问题主要在requestObj.reset()中:
-如果元素已经隐藏,为什么还要隐藏它们?
-如果尚未将超时变量(loadingTimeoutInstance和cerrorTimeoutInstance)设置为超时,则无法清除它们-这将导致其无法正常工作。
最佳答案
实际上,您实际上不需要检查它是否为某种类型,就可以了。if(cerrorTimeoutInstance) clearTimeout(cerrorTimeoutInstance);