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

使用函数存储每次ajax调用数据时报错,如何实现跨请求数据累积?

核心错误原因

  1. 构造函数调用与命名冲突
    你定义的dataAccumulator是构造函数,但调用时既没有加new关键字,还用和构造函数完全同名的变量接收执行结果:
  • 不加new调用构造函数时,函数默认返回undefined,你赋值给dataAccumulator变量的值就是undefined,调用append自然会报Cannot read property 'append' of undefined
  • 变量和构造函数同名,赋值后原构造函数会被覆盖,后续调用就会报dataAccumulator is not a function
  1. $(document).ready位置错误
    你把$(document).ready放在了startTempMonit函数内部,如果该函数是在页面加载完成后才触发,ready回调内的逻辑不会正常执行。

修正后的完整代码方案

这里用更稳妥的闭包工厂函数实现,避免this指向问题:

var inter;
// 定义数据累积器工厂函数
function createDataAccumulator() {
    // 私有存储数组,外部无法直接修改
    const accumData = [];
    console.log("数据累积器创建完成")
    // 暴露对外方法
    return {
        // 追加数据
        append: function(data) {
            accumData.push(data);
            console.log('当前累积数据:', accumData);
        },
        // 可选:获取所有累积数据
        getAll: function() {
            // 返回数组拷贝,避免外部修改内部存储
            return [...accumData];
        }
    }
}
// 初始化全局累积器实例
const dataAccumulator = createDataAccumulator();

// 启动温度监测逻辑
function startTempMonit() {
    let time = 0;
    inter = setInterval(function() {
        $.ajax({
            // 你的原有AJAX参数保留
        })
        .done(function(data) {
            // 直接调用累积器方法追加数据
            dataAccumulator.append(data);  
        });
        time += 0.5;
    }, 500)
};

// 页面加载完成后启动监测
$(document).ready(function() {
    startTempMonit();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:06:02