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

如何在请求JSON文件的URL中添加计数变量遍历项目ID

错误原因说明
  • 第一版代码:硬编码请求ID为1,仅能发起单次固定ID的请求,未实现遍历逻辑,自然无法拉取多个ID对应的数据。
  • 第二版代码:仅在ID为0时发起了一次请求,while循环写在请求成功的回调函数内,仅对同一次请求的返回结果做了多次重复插入,没有为后续ID发起新的请求,所以不会拉取到其他ID的对应数据。
可行实现方案

核心思路为遍历0~20的所有ID,为每个ID单独发起请求,请求成功说明是有效ID,存入结果列表;请求失败则说明是无效ID,直接跳过即可。

基础逐次请求写法

$scope.projectList = [];
// 遍历0到20的所有ID,使用let保证循环内的块级作用域
for (let id = 0; id <= 20; id++) {
    const targetURL = `https://happybuildings.sim.vuw.ac.nz/api/sooleandr/project.${id}.json`;
    $http.get(targetURL)
        .then(function successCall(response) {
            // 请求成功,将对应ID的数据存入列表
            $scope.projectList.push(response.data);
        })
        .catch(function errorCall() {
            // 请求失败说明ID无效,跳过即可
            console.log(`ID ${id} 为无效ID,已跳过`);
        });
}

兼容ES5的写法

如果项目环境不支持ES6的let语法,可改用立即执行函数处理循环变量的作用域问题:

$scope.projectList = [];
for (var id = 0; id <= 20; id++) {
    // 用立即执行函数锁定当前循环的ID值
    (function(currentId) {
        var targetURL = 'https://happybuildings.sim.vuw.ac.nz/api/sooleandr/project.' + currentId + '.json';
        $http.get(targetURL)
            .then(function(response) {
                $scope.projectList.push(response.data);
            })
            .catch(function() {
                console.log('ID ' + currentId + ' 为无效ID,已跳过');
            });
    })(id);
}

全请求完成后统一处理写法

如果需要等待所有ID的请求都执行完成后再做统一逻辑处理,可使用$q合并所有请求的Promise:

$scope.projectList = [];
const requestList = [];

for (let id = 0; id <= 20; id++) {
    const targetURL = `https://happybuildings.sim.vuw.ac.nz/api/sooleandr/project.${id}.json`;
    // 单个请求提前catch错误,避免单个无效ID请求失败导致全部请求被终止
    const request = $http.get(targetURL)
        .then(res => res.data)
        .catch(() => null);
    requestList.push(request);
}

// 等待所有请求执行完成
$q.all(requestList).then(function(results) {
    // 过滤掉无效ID返回的null值,得到所有有效ID的对应数据
    $scope.projectList = results.filter(item => item !== null);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:27:00