使用jQuery.data()丢失数据

使用jQuery.data()丢失数据,jquery,data-loss,Jquery,Data Loss,我正在开发一个实用的web应用程序,它可以帮助操作一些特定于领域的XML数据 流程如下所示: 加载XML文件 使用浏览器的原生XML对象(不是jQuery!)解析XML文件并转换为JavaScript对象 使用$(document).data()存储结果对象 迭代对象并提取附加信息,将其存储在另一个$(document).data()槽中 #4需要相当长的时间,所以我使用window.setTimeout()将工作分成若干块。 以下是函数: function explodeDataStep(in

我正在开发一个实用的web应用程序,它可以帮助操作一些特定于领域的XML数据

流程如下所示:

  • 加载XML文件
  • 使用浏览器的原生XML对象(不是jQuery!)解析XML文件并转换为JavaScript对象
  • 使用$(document).data()存储结果对象
  • 迭代对象并提取附加信息,将其存储在另一个$(document).data()槽中
  • #4需要相当长的时间,所以我使用
    window.setTimeout()
    将工作分成若干块。 以下是函数:

    function explodeDataStep(index, max) {
        var data = $(document).data('data');
        var lists = $(document).data('lists');
        $debug('explodeDataStep', index, $(document).data('data'), $.data(document));
    
        var count = 0;
        for (index; index < data.vehicles.length; index++) {
            var vehicle = data.vehicles[index];
    
            if ($.inArray(vehicle.make, lists.make) < 0) lists.make.push(vehicle.make);
            if ($.grep(lists.model, function(v) { return v.make == vehicle.make && v.model == vehicle.model; }).length == 0) lists.model.push({ make: vehicle.make, model: vehicle.model });
            if ($.inArray(vehicle.module, lists.module) < 0) lists.module.push(vehicle.module);
            if ($.inArray(vehicle.doorlock, lists.doorlock) < 0) lists.doorlock.push(vehicle.doorlock);
            if ($.inArray(vehicle.doorlockCombo, lists.doorlockCombo) < 0) lists.doorlockCombo.push(vehicle.doorlockCombo);
            if ($.inArray(vehicle.tHarness, lists.tHarness) < 0) lists.tHarness.push(vehicle.tHarness);
    
            count++;
            if (count >= max) {
                index++;
                updateExplodeDataStatus(index);
                window.setTimeout(explodeDataStep, 10, index, max);
                return;
            }
        }
        finishExplodeData();
    }
    
    函数分解数据步骤(索引,最大值){
    var data=$(document.data('data');
    变量列表=$(文档).data('list');
    $debug('explodestep',index,$(document).data('data'),$.data(document));
    var计数=0;
    用于(索引;索引=最大值){
    索引++;
    更新explodedatastatus(索引);
    setTimeout(explodeDataStep,10,index,max);
    返回;
    }
    }
    finishExplodeData();
    }
    
    出于某种原因,当索引达到480左右时,我注意到存储在$(document).data('data')中的一些数据消失了,我一辈子都不知道为什么

    因此,以下是一些可能导致答案的问题:

    • 以这种方式使用
      window.setTimeout()
      是一个非常糟糕的主意吗
    • 使用jQuery.data()可以存储多少数据有限制吗?我的XML文件约为100KB

    在这种情况下,我不会使用jQuery,而是将您的信息存储为本机JavaScript对象。

    这令人尴尬

    我在代码的其他地方使用了Array.splice()。行了。是的