2009-11-23 4 views
2

Je travaille sur une application Web utilitaire qui permet de manipuler certaines données XML spécifiques à un domaine.Perdre des données avec jQuery.data()

Le flux va comme ceci:

  1. fichier XML Load
  2. fichier XML Parse utilisant des objets XML natifs du navigateur (pas jQuery!) Et convertir en objet JavaScript.
  3. Magasin objet obtenu en utilisant $ (document) .data()
  4. par objet et Itérer extraire des informations supplémentaires, le stockage que dans un autre $ (document) .data() fente
# 4 prend une bonne quantité de temps, donc j'utilise window.setTimeout() pour diviser le travail en morceaux.

Voici la fonction:

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(); 
} 

Pour une raison quelconque, lorsque l'indice se lève à environ 480, je remarque que certaines des données stockées dans $ (document) .data (« données ») disparaît juste, et je ne peux pas pour la vie de moi comprendre pourquoi.

Alors, voici quelques questions qui peuvent conduire à la réponse:

  • utilise-t-window.setTimeout() de cette façon une idée incroyablement mauvais?
  • Existe-t-il des limites quant à la quantité pouvant être stockée à l'aide de jQuery.data()? Mon fichier XML est ~ 100KB.

Répondre

1

Ceci est gênant ...

j'utilisais Array.splice() ailleurs dans mon code. Ça va le faire. Oui.

0

Dans ce cas, je n'utiliserais pas jQuery et stockerais plutôt vos informations dans des objets JavaScript natifs.

Questions connexes