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

如何在JavaScript中为API返回结果正确实现setInterval定时更新功能

核心问题排查与修复方案

你代码里的问题主要集中在4个点,修改后即可正常运行定时更新:

  • headers语法错误:settings.headers需要是键值对格式,原代码直接写两个字符串属于语法错误,会导致AJAX请求直接报错无法发出,你需要把示例里的占位内容替换为实际的请求头键值对,比如"Accept": "application/json"这类格式。
  • 错误覆盖表格表头:你直接给整个标签设置innerHTML,会把原本写死的表头行完全覆盖,第一次渲染后表头就消失,需要拆分表头和数据渲染区域。
  • 无错误捕获逻辑:接口跨域、鉴权失败、返回格式错误都会导致请求失败,没有错误捕获的话无法感知问题,看起来就像定时器没运行。
  • 固定间隔可能导致请求堆积:如果网络较慢,5秒内上一个请求还没返回,下一个请求就会触发,容易出现数据顺序错乱的问题。

  • 修改后的代码

    HTML代码

    给表格新增单独的tbody标签用来承载动态渲染的数据,保留固定表头:

    <table>
      <thead>
        <tr>
          <th>NAME</th>
          <th>LTP</th>
          <th>CHANGE</th>
          <th>CHG %</th>
          <th>OPEN</th>
          <th>HIGH</th>
          <th>LOW</th>
          <th>CLOSE</th>
          <th>30 DAY ROI</th>
          <th>1 YR ROI</th>
          <th>UPDATED ON</th>
        </tr>
      </thead>
      <tbody id="shares-body">
      </tbody>
    </table>
    

    JavaScript代码

    调整请求配置、渲染逻辑,改用链式setTimeout实现更稳定的定时更新,添加错误捕获:

    const settings = {
      async: true,
      crossDomain: true,
      url: "https://datasource.com/price?list",
      method: "GET",
      // 修改为正确的键值对格式请求头,替换成你实际的请求头内容
      headers: {
        "Accept": "application/json",
        "Authorization": "你的实际鉴权信息"
      }
    };
    
    // 封装数据请求函数
    function fetchData() {
      $.ajax(settings)
      .done(function(response) {
        let sdata = '';
        $.each(response, function(key, value) {
          sdata += '<tr>';
          sdata += '<td>' + value.symbol + '</td>';
          sdata += '<td>' + value.lastPrice + '</td>';
          sdata += '<td>' + value.change + '</td>';
          sdata += '<td>' + value.pChange + '</td>';
          sdata += '<td>' + value.open + '</td>';
          sdata += '<td>' + value.dayHigh + '</td>';
          sdata += '<td>' + value.dayLow + '</td>';
          sdata += '<td>' + value.previousClose + '</td>';
          sdata += '<td>' + value.perChange30d + '</td>';
          sdata += '<td>' + value.perChange365d + '</td>';
          sdata += '<td>' + value.lastUpdateTime + '</td>';
          sdata += '</tr>';
        });
        // 只替换tbody的内容
        $('#shares-body').html(sdata);
      })
      .fail(function(error) {
        // 这里可以自定义报错提示,方便排查问题
        console.error('数据请求失败:', error);
      })
      .always(function() {
        // 不管请求成功失败,都在5秒后触发下一次请求,避免请求堆积
        setTimeout(fetchData, 5000);
      });
    }
    
    // 页面加载后立即触发第一次请求
    fetchData();
    

    内容的提问来源于stack exchange,提问作者Abdul Shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:06:03