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

从两个接口获取版本值并对比时变量未定义问题求助

问题分析与解决建议

问题根源

你代码里的$.getJSON是异步HTTP请求——浏览器会在后台发起请求,同时继续执行后续代码。当if (window.Lversion === window.Cversion)这段判断逻辑执行时,两个请求还没完成,Lversion和Cversion根本没被赋值,所以始终返回undefined。

解决方案

必须等两个异步请求都完成后,再执行版本对比逻辑。推荐用Promise.all统一处理请求完成状态,修改后的脚本代码如下:

<script>
  // 将getJSON封装为Promise
  const fetchLatestVersion = () => {
    return new Promise((resolve, reject) => {
      $.getJSON("https://api.github.com/repos/3kh0/3kh0.github.io/releases/latest", (data) => {
        const version = data.tag_name;
        document.getElementById("tag_name").innerText = version;
        resolve(version);
      }).fail(reject);
    });
  };

  const fetchCurrentVersion = () => {
    return new Promise((resolve, reject) => {
      $.getJSON("about.json", (cur) => {
        const version = cur.version;
        document.getElementById("version").innerText = version;
        resolve(version);
      }).fail(reject);
    });
  };

  // 等待两个请求全部完成后执行对比
  Promise.all([fetchLatestVersion(), fetchCurrentVersion()])
    .then(([Lversion, Cversion]) => {
      if (Lversion === Cversion) {
        console.log("Up to date! " + Cversion);
        document.getElementById("uptodate").innerText = "Yes";
      } else {
        console.warn("Out of date, latest version: " + Lversion);
        document.getElementById("uptodate").innerText = "No";
      }
    })
    .catch((error) => {
      console.error("获取版本信息失败:", error);
      document.getElementById("uptodate").innerText = "Error";
    });
</script>

替代方案(jQuery原生方法)

也可以用jQuery自带的$.when()处理多个异步请求,逻辑和Promise.all一致:

$.when(fetchLatestVersion(), fetchCurrentVersion())
  .done((Lversion, Cversion) => {
    if (Lversion[0].tag_name === Cversion[0].version) {
      console.log("Up to date! " + Cversion[0].version);
      document.getElementById("uptodate").innerText = "Yes";
    } else {
      console.warn("Out of date, latest version: " + Lversion[0].tag_name);
      document.getElementById("uptodate").innerText = "No";
    }
  })
  .fail((error) => {
    console.error("获取版本信息失败:", error);
    document.getElementById("uptodate").innerText = "Error";
  });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:16:12