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

如何循环获取完整的JSON下游项目序列(同变量不同值)

解决链式项目序列的异步遍历问题

你现在的代码是手动嵌套了两次AJAX调用,只能处理前三个项目,没法自动顺着toto→titi→tata→trtr→tktk→tztz的链条继续遍历对吧?其实用递归函数就能搞定这种异步的链式遍历,让代码自动去获取每个项目的下游,直到走完整个序列。

核心思路

写一个通用的递归函数,逻辑很简单:

  • 接收当前要处理的项目名称
  • 先打印当前项目(匹配你要的输出顺序)
  • 调用AJAX获取该项目的下游列表
  • 对每个下游项目,递归调用这个函数,继续处理它的下游

这样就不用手动写多层嵌套的AJAX调用,代码能自动顺着链条走下去。

修改后的完整代码

// 从第一个项目toto启动遍历
fetchDownstream("toto");

// 通用递归遍历函数
function fetchDownstream(projectName) {
    // 打印当前项目(保证顺序正确)
    console.log(projectName);
    
    // 构造当前项目的API请求URL
    const url = `.../${projectName}/api/json?pretty=true`;
    
    // 发起AJAX请求获取下游项目
    ajaxGet(url, function(response) {
        const jsonData = JSON.parse(response);
        // 遍历每个下游项目,递归处理
        jsonData.downstreamProjects.forEach(function(group) {
            fetchDownstream(group.name);
        });
    });
}

// 保留你原有的AJAX工具函数(不需要ajaxGet2了,通用一个就行)
function ajaxGet(url, callback) {
    // 这里放你原有的AJAX实现逻辑,比如XMLHttpRequest示例:
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.onload = function() {
        if (xhr.status >= 200 && xhr.status < 300) {
            callback(xhr.responseText);
        }
    };
    xhr.send();
}

代码说明

  • 删掉了原来的ajaxGet2和recover、recover2函数,用一个fetchDownstream递归函数替代,代码更简洁也更灵活。
  • 初始调用fetchDownstream("toto")就会自动启动整个流程:先打印toto,获取它的下游titi,递归处理titi时打印titi并获取tata,以此类推直到tztz。
  • 因为AJAX是异步操作,递归能保证我们在上一个项目的下游数据获取完成后,再处理下一个项目,不会打乱输出顺序。

运行这段代码后,就能得到你预期的输出:toto titi tata trtr tktk tztz啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:50:03