使用函数存储每次ajax调用数据时报错,如何实现跨请求数据累积?
核心错误原因
- 构造函数调用与命名冲突
你定义的dataAccumulator是构造函数,但调用时既没有加new关键字,还用和构造函数完全同名的变量接收执行结果:
- 不加
new调用构造函数时,函数默认返回undefined,你赋值给dataAccumulator变量的值就是undefined,调用append自然会报Cannot read property 'append' of undefined - 变量和构造函数同名,赋值后原构造函数会被覆盖,后续调用就会报
dataAccumulator is not a function
$(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
相关产品推荐
相关产品推荐

