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

如何拼接SharePoint多AJAX调用结果到单变量供jQuery DataTables使用

问题根因

  • 初始版本:for循环每次迭代都会覆盖yearh1、yearh2变量,最终$.when()仅监听了2021年的2个请求,前几年的请求完成不会触发渲染,因此只能拿到2021年数据。
  • 优化版本:$.when()不支持直接传入请求数组,必须将数组展开后传入,你额外传入的$属于冗余参数,导致渲染触发时大部分请求还未返回,无法拿到全量拼接结果。

修正后可用代码

var allResults = [];
var allRequests = [];

$(document).ready(function () {
    load();
});

function load() {
    for (let year = 2016; year < 2022; year++) {
        // 上半年请求
        var yearh1 = $.ajax({    
            url: "SPO_Site/_api/web/lists/getbytitle('List_Name')/items?$top=5000&$select=*&$filter=(Incident_x0020_Date ge datetime'"+(year-1)+"-12-31T20:00:00.000Z') and (Incident_x0020_Date lt datetime'"+year+"-06-01T00:00:00.000Z')",    
            type: "GET", 
            dataType: "json", 
            headers: {"accept": "application/json;odata=verbose"},    
            success: mySuccHandler, 
            error: myErrHandler
        }); 
        // 下半年请求
        var yearh2 = $.ajax({    
            url: "SPO_Site/_api/web/lists/getbytitle('List_Name')/items?$top=5000&$select=*&$filter=(Incident_x0020_Date ge datetime'"+year+"-06-01T00:00:00.000Z') and (Incident_x0020_Date le datetime'"+year+"-12-31T00:00:00.000Z')",    
            type: "GET", 
            dataType: "json", 
            headers: {"accept": "application/json;odata=verbose"},    
            success: mySuccHandler, 
            error: myErrHandler
        }); 

        allRequests.push(yearh1);
        allRequests.push(yearh2); 
    }       

    function mySuccHandler(res) {
        // 简化拼接逻辑,直接合并结果
        allResults = allResults.concat(res.d.results);
    }

    function myErrHandler(data, errorCode, errorMessage) {
        console.log("请求失败: " + errorMessage);        
    };

    // 核心修正:用apply展开请求数组,确保所有12个请求全部完成后再渲染表格
    $.when.apply($, allRequests).done(function(){
        $('#table_id').DataTable({
            data: allResults,
            dom: 'Bfrtip',
            columns: [
                { data: "Title" },
                { data: "Reg_x0020_No" }
            ]
        });
    });  
};

额外优化建议

如果后续数据量继续增长,还可以在$filter中补充$orderby=ID asc,结合$skiptoken做分页,无需手动按时间拆分请求,也能突破5000条阈值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:27:03