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

如何实现依赖式getJSON()调用?批量获取Trello卡片历史数据

实现Trello卡片动作数据拉取并追加到表格的完整指南

嘿,我来给你一步步拆解这个Trello API的实现流程,不管你是用前端的jQuery还是原生JavaScript,我都给你写好具体的代码示例,照着来就行~

1. 先搞定前置准备:获取Trello API密钥和令牌

首先你得拿到Trello的API访问权限:

  • 去Trello开发者页面申请API Key(免费就能获取)
  • 生成一个Token(需要授权你的账号访问目标看板,这样API才能读取看板数据)
    这俩参数是所有请求的必备项,后面每个API调用都得带上。

2. 第一步:拉取目标看板的所有卡片ID数组

先调用Trello的看板卡片API,把目标看板下所有卡片的ID提取出来,存到数组里。这里给你两种常见写法:

用jQuery getJSON 的写法

如果你的项目已经在用jQuery,这个写法更顺手:

// 替换成你自己的看板ID、API Key和Token
const boardId = "你的看板ID";
const apiKey = "你的Trello API Key";
const token = "你的Trello授权Token";
let cardIds = [];

// 发起请求获取看板下所有卡片
$.getJSON(`https://api.trello.com/1/boards/${boardId}/cards?key=${apiKey}&token=${token}`, function(cards) {
  // 从返回的卡片数据里提取ID,存到数组
  cardIds = cards.map(card => card.id);
  // 拿到ID数组后,立刻执行下一步:拉取每个卡片的动作数据
  fetchCardActions(cardIds);
})
.fail(function(err) {
  console.error("获取卡片ID失败啦:", err);
});

原生JavaScript fetch 写法(更现代)

如果不用jQuery,用原生JS的异步函数写法更符合现代开发习惯:

const boardId = "你的看板ID";
const apiKey = "你的Trello API Key";
const token = "你的Trello授权Token";
let cardIds = [];

// 异步函数获取卡片ID数组
async function getCardIds() {
  try {
    const response = await fetch(`https://api.trello.com/1/boards/${boardId}/cards?key=${apiKey}&token=${token}`);
    const cards = await response.json();
    cardIds = cards.map(card => card.id);
    // 拿到ID后触发下一步
    await fetchCardActions(cardIds);
  } catch (err) {
    console.error("获取卡片ID失败啦:", err);
  }
}

// 启动第一步流程
getCardIds();

3. 第二步:遍历卡片ID,拉取动作数据存入action_tableData

这一步要注意Trello的请求频率限制(免费版大概100次/分钟),所以每个请求之间加个小延迟,避免被限流返回429错误。

定义拉取动作数据的函数(原生JS版)

// 用来存储所有卡片动作数据的数组
let action_tableData = [];

async function fetchCardActions(cardIds) {
  // 逐个遍历卡片ID,异步拉取动作
  for (const cardId of cardIds) {
    try {
      // 调用Trello卡片动作API,可通过`filter`参数筛选你需要的动作类型(比如只看创建、更新)
      const response = await fetch(`https://api.trello.com/1/cards/${cardId}/actions?key=${apiKey}&token=${token}&filter=all`);
      const actions = await response.json();
      
      // 把当前卡片的动作数据存入数组,建议额外加个cardId字段方便关联
      const cardActions = actions.map(action => ({
        ...action,
        cardId: cardId // 标记这条动作属于哪个卡片
      }));
      action_tableData.push(...cardActions);
      
      // 加500ms延迟,避免触发限流
      await new Promise(resolve => setTimeout(resolve, 500));
    } catch (err) {
      console.error(`拉取卡片${cardId}的动作失败:`, err);
      // 就算某个卡片失败,也继续处理下一个
      continue;
    }
  }
  
  // 所有动作拉取完成后,执行最后一步:追加到表格
  appendToTable(action_tableData);
}

jQuery版的遍历处理(回调异步)

如果用jQuery,因为是回调式异步,得用递归或者计数器来处理遍历:

let action_tableData = [];
let currentCardIndex = 0;

function fetchCardActions(cardIds) {
  // 所有卡片处理完就结束
  if (currentCardIndex >= cardIds.length) {
    appendToTable(action_tableData);
    return;
  }
  
  const cardId = cardIds[currentCardIndex];
  $.getJSON(`https://api.trello.com/1/cards/${cardId}/actions?key=${apiKey}&token=${token}&filter=all`, function(actions) {
    const cardActions = actions.map(action => ({...action, cardId}));
    action_tableData.push(...cardActions);
    currentCardIndex++;
    // 延迟500ms处理下一个卡片
    setTimeout(() => fetchCardActions(cardIds), 500);
  })
  .fail(function(err) {
    console.error(`拉取卡片${cardId}的动作失败:`, err);
    currentCardIndex++;
    setTimeout(() => fetchCardActions(cardIds), 500);
  });
}

4. 第三步:把action_tableData追加到table对象

这里分两种情况,如果你是前端DOM表格,就这么写;如果是后端数据表格(比如数据库表),就对应批量插入即可。

前端DOM表格追加示例

function appendToTable(data) {
  // 替换成你页面中表格的ID
  const table = document.getElementById("your-target-table-id");
  // 找到表格的tbody,没有就直接用table本身
  const tbody = table.querySelector("tbody") || table;
  
  // 遍历每条动作数据,创建表格行
  data.forEach(action => {
    const row = document.createElement("tr");
    // 这里根据你需要展示的字段来写单元格内容,比如动作类型、时间、执行者
    row.innerHTML = `
      <td>${action.id}</td>
      <td>${action.type}</td>
      <td>${new Date(action.date).toLocaleString()}</td>
      <td>${action.memberCreator?.fullName || "未知用户"}</td>
      <td>${action.cardId}</td>
    `;
    tbody.appendChild(row);
  });
  
  console.log("动作数据已经成功追加到表格啦!");
}

后端数据表格追加示例(比如Node.js)

如果是后端把数据存到数据库表,比如用SQL或者ORM:

// 假设你用的是sequelize ORM,action_tableData是模型对应的数组
async function appendToTable(data) {
  try {
    // 批量创建记录
    await ActionModel.bulkCreate(data);
    console.log("动作数据已成功追加到数据库表!");
  } catch (err) {
    console.error("追加数据失败:", err);
  }
}

几个关键提醒

  • 请求限流:一定要加延迟或者控制并发数,不然Trello会返回429错误,限制你的请求。
  • 权限检查:确保你的Token有访问目标看板的权限,不然会返回401/403错误。
  • 字段筛选:调用动作API时,用filter参数指定需要的动作类型(比如filter=createCard,updateCard),减少返回的数据量,提升速度。
  • 错误处理:每个请求都加错误捕获,避免一个卡片失败导致整个流程中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:21:32