You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让setInterval函数首次执行无延迟?

解决首次加载无延迟+后台自动刷新的方案

问题根源是你当前仅通过setInterval触发请求,首次执行要等250毫秒才会发起请求,导致页面初始状态为空。直接按下面的方式修改,就能实现首次无延迟加载,之后后台自动刷新:

修改后的完整代码

<script>
function ajax() { 
    var request = null; 
    // 创建XMLHttpRequest对象
    if (window.XMLHttpRequest) { 
        request = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
        request = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    if(request) { 
        request.open("GET", "troops.php"); 
        // 仅在请求成功完成时更新内容
        request.onreadystatechange = function () { 
            // 判断请求状态:readyState=4表示请求完成,status=200表示请求成功
            if (request.readyState === 4 && request.status === 200) {
                document.getElementById("main").innerHTML = request.responseText; 
            }
            // 可选:添加请求失败的处理逻辑
            else if (request.readyState === 4 && request.status !== 200) {
                document.getElementById("main").innerHTML = "加载失败,请稍后重试";
            }
        } 
        request.send(null); 
    }
}

// 页面加载后立刻执行一次ajax,消除首次延迟
ajax();
// 用函数引用代替字符串,避免eval解析的隐患
setInterval(ajax, 250);
</script>

<div id="main"></div>

关键改动说明

  • 手动触发首次请求:在setInterval之前直接调用ajax(),页面加载时立刻发起请求,首次内容无延迟显示
  • 修复请求状态判断:原代码没有判断readyState和status,可能会在请求未完成或失败时更新内容,导致显示异常
  • 优化定时器调用:将setInterval("ajax()",250)改为setInterval(ajax, 250),避免字符串解析带来的性能损耗和安全风险

内容的提问来源于stack exchange,提问作者adam Allan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:31:06