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

使用__next分页获取ProjectData API全部TaskName失败求助

解决Project Data REST API分页获取所有TaskName的问题

你的问题很清晰:已经成功识别出__next分页URL,但代码只处理了第一页的数据,没有继续请求后续页面。核心问题在于你只是打印了下一页的URL,却没有实际发起新的请求去获取那一页的任务数据。

修复方案:用递归函数处理分页请求

我们可以把数据请求的逻辑封装成一个可复用的函数,当检测到存在下一页时,递归调用这个函数来获取后续数据。这样就能自动遍历所有分页,输出每一页的TaskName。

修改后的完整代码如下:

// 封装获取任务数据的函数,支持分页递归
function fetchTasks(url) {
  $.ajax({
    url: url,
    method: "GET",
    dataType: "json",
    headers: {
      Accept: "application/json;odata=verbose"
    },
    success: function(data) {
      // 遍历当前页的所有任务,打印TaskName
      $.each(data.d.results, function(key, value) {
        console.log(value.TaskName);
      });
      
      // 检查是否存在下一页,如果有就继续请求
      if (data.d.__next) {
        console.log("正在获取下一页,URL: " + data.d.__next);
        fetchTasks(data.d.__next);
      } else {
        console.log("🎉 所有任务数据已全部获取完成");
      }
    },
    error: function(xhr, status, error) {
      console.error("请求失败: " + error);
    }
  });
}

// 页面加载完成后,发起初始请求
window.addEventListener('load', function() {
  const initialApiUrl = _spPageContextInfo.siteAbsoluteUrl + "/_api/ProjectData/[en-US]/Tasks";
  fetchTasks(initialApiUrl);
});

代码说明

  1. 封装可复用函数:fetchTasks函数负责发起请求并处理响应,接受一个URL参数——初始调用时传第一页的API地址,后续调用传__next的URL。
  2. 处理当前页数据:在success回调里,先遍历当前页的results数组,打印每个任务的TaskName。
  3. 递归处理分页:如果响应里存在data.d.__next,就把这个URL传给fetchTasks,继续获取下一页数据;如果没有,说明所有数据都获取完了。
  4. 错误处理:加上了error回调,方便调试请求失败的情况(比如权限问题、API地址错误等)。

注意事项

  • 确保页面已经加载了jQuery,否则$.ajax会报错(SharePoint页面一般默认会加载jQuery,但如果是自定义页面需要手动引入)。
  • 如果你的任务数据量极大(比如数千条),递归可能会有调用栈溢出的风险,这种情况下可以改用async/await结合循环的方式实现,但对于大多数场景来说,递归已经足够简单好用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:37:49