2009-11-23 49 views
2

我正在研究一个实用程序的web应用程序,以帮助处理某些特定于域的XML数据。使用jQuery.data丢失数据()

流程是这样的:使用

  1. 加载XML文件
  2. 解析XML文件浏览器的原生XML对象(不jQuery的!),并转换为JavaScript对象。使用$(文件)。数据()
  3. 迭代通过对象和提取附加信息,存储在另一个$(文件)。数据()槽
#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(); 
    } 
    

    出于某种原因,当指数起床到480左右,我注意到,一些存储在$(文件)中的数据。数据的(“数据”)只是消失了,我不能为了我的生活找出原因。

    因此,这里有一些问题,可能会导致答案:

    • 是使用window.setTimeout()以这种方式令人难以置信的坏主意?
    • 是否有限制可以使用jQuery.data()存储多少?我的XML文件是〜100KB。
  • 回答

    1

    这是尴尬...

    我使用方法Array.splice()在我的代码的其他地方。这将做到这一点。是的。

    0

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