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

求助:排查Google Sheets API Key实现网页电竞排行榜失效问题

电竞排行榜(Google Sheets + JS)数据加载故障排查

问题说明

正在制作大学项目的电竞排行榜系统,计划通过JavaScript结合Google Sheets实现网页动态展示排行榜数据。已填入API Key、表格ID并指定数据范围,但网页始终无法显示数据,且仅限前端代码实现,需排查解决。

现有代码

HTML代码

<!-- HTML for Leaderboard -->
<div id="leaderboard">
  <h2>Esports Leaderboard</h2>
  <ul id="leaderboard-list">
    <script src="js/leaderboard.js"></script>
    <!-- Leaderboard items will be inserted here dynamically using JavaScript -->
  </ul>
</div>

注:通过空<ul>配合CSS样式,期望脚本动态插入数据。

CSS代码

#leaderboard {
  max-width: 600px;
  margin: 0 auto;
  font-family: Arial, sans-serif;
}

#leaderboard h2 {
  text-align: center;
}

#leaderboard ul {
  list-style-type: none;
  padding: 0;
}

#leaderboard li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px;
  border-bottom: 1px solid #ccc;
}

#leaderboard li:nth-child(even) {
  background-color: #f9f9f9;
}

#leaderboard .username {
  flex-grow: 1;
}

JavaScript代码

// Function to load Google Sheets API
function loadSheetsAPI() {
  gapi.load('client', function() {
    gapi.client.init({
      'apiKey': 'key'
    }).then(function() {
      fetchData();
    }).catch(function(error) {
      console.error('Error initializing Google Sheets API:', error);
    });
  });
}

// Load Google Sheets API with a delay
setTimeout(loadSheetsAPI, 1000); // Adjust the delay time as needed (in milliseconds)


// Function to fetch data from Google Sheets
function fetchData() {
  if (!gapi.client.sheets) {
    console.error('Google Sheets API is not loaded or initialized.');
    return;
  }

  gapi.client.sheets.spreadsheets.values.get({
    spreadsheetId: '1HWGVLLX1ugAewLUMAyLxImHo_qeBzam5-Z8RzBpxVBI',
    range: 'Sheet1!A1:C21' // Change this to match the range you want to fetch
  }).then(function(response) {
    var range = response.result;
    if (range.values && range.values.length > 0) {
      displayData(range.values);
    } else {
      console.log('No data found in the specified range.');
    }
  }).catch(function(error) {
    console.error('Error fetching data from Google Sheets:', error);
  });
}

// Function to display data in HTML
function displayData(data) {
  var leaderboardDiv = document.getElementById('leaderboard');
  var leaderboardList = document.getElementById('leaderboard-list');

  leaderboardDiv.innerHTML = '&lt;h2&gt;Leaderboard&lt;/h2&gt;';
  leaderboardList.innerHTML = '';

  for (var i = 0; i < data.length; i++) {
    var listItem = document.createElement('li');
    listItem.textContent = data[i].join(' | ');
    leaderboardList.appendChild(listItem);
  }
}

// Load Google Sheets API
loadSheetsAPI();

排查与解决方案

1. 确认Google Sheets API已启用

登录Google Cloud控制台,找到你的项目,搜索Google Sheets API,确保状态为“已启用”。若未启用,点击“启用”按钮。

2. 验证API Key配置

  • 检查API Key的权限:确保该Key允许调用Google Sheets API,无禁用限制;
  • 本地测试时,调整API Key的HTTP referrer限制:可暂时设置为*(允许所有来源),或添加localhost:端口号到允许列表;
  • 替换代码中的'key'为你实际的有效API Key。

3. 调整Google Sheets共享权限

打开目标Google Sheets表格,点击右上角“共享”按钮,设置权限为**“任何人拥有链接都可查看”**并保存。前端无OAuth授权,只能访问公开可查看的表格数据。

4. 修正JavaScript代码问题

核心初始化错误

原代码未指定discoveryDocs,导致gapi.client.sheets无法加载。修改loadSheetsAPI函数:

function loadSheetsAPI() {
  gapi.load('client', function() {
    gapi.client.init({
      apiKey: '你的API_KEY',
      // 添加discoveryDocs参数,指定Sheets API的文档地址
      discoveryDocs: ["https://sheets.googleapis.com/$discovery/rest?version=v4"]
    }).then(function() {
      fetchData();
    }).catch(function(error) {
      console.error('Error initializing Google Sheets API:', error);
    });
  });
}

移除重复初始化调用

原代码同时调用了loadSheetsAPI()和setTimeout(loadSheetsAPI, 1000),会导致重复初始化,删除其中一行(建议删除setTimeout那行,避免不必要的延迟)。

修复HTML转义错误

displayData函数中,leaderboardDiv.innerHTML使用了转义字符,导致无法渲染HTML标签,修改为:

leaderboardDiv.innerHTML = '<h2>Leaderboard</h2>';

调整脚本加载位置

将<script src="js/leaderboard.js"></script>从<ul>内部移到<body>标签末尾,确保DOM完全加载后再执行脚本:

<div id="leaderboard">
  <h2>Esports Leaderboard</h2>
  <ul id="leaderboard-list"></ul>
</div>

<script src="js/leaderboard.js"></script>

5. 调试排查

  • 打开浏览器开发者工具(F12),切换到Console标签,查看是否有错误提示;
  • 切换到Network标签,过滤XHR请求,查看Google Sheets API的请求状态:
    • 403错误:通常是API未启用、API Key权限不足或表格未公开;
    • 404错误:检查表格ID或数据范围是否正确;
    • 200状态但无数据:确认表格指定范围内有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:05:22