2010-12-09 5 views
1

Je cherche une bonne stratégie pour insérer environ 2500 tuples noms firstName lastName (600KB) à partir d'un appel AJAX. Le délai expire après la fin de l'appel AJAX et pendant le stockage des données dans la base de données localstorage. Les données sont au format XML. Ce que je fais est maintenant convertir les données XML en un objet en faisant une jQuery.each() sur les données avec cela,Eviter les délais d'attente sur l'iPhone

associateNames[index] = { 
    firstName:jQuery(value).find("First").text(), 
    lastName:jQuery(value).find("Last").text(), 
    id:jQuery(value).find("ID").text() 
}; 

Puis je passe cet objet à une fonction qui crée une table et insère ces données . La partie principale de cette fonction est.

query2.executeSql('CREATE TABLE directory (id unique, fullName)', [], 

     // On Success 
      function(query, result) { 
       jQuery.each(data, function(index, value) { 
        var querySQL = 'INSERT INTO directory (id, fullName) VALUES (' + value.id + 
          ', "'+ encodeURI(value.firstName) + encodeURI(value.lastName) + '")'; 
        query.executeSql(querySQL); 
       }); 
      }, 

L'iPhone ne prend pas en charge les travailleurs Web. Il devrait y avoir un moyen d'utiliser setInterval() et de traiter des morceaux de données à la fois, mais je suis bloqué. S'il vous plaît laissez-moi savoir si vous avez une idée.

Merci!

Répondre

1

Ai-je raison de penser que la "donnée" est un tableau? Si oui, vous pouvez faire quelque chose comme ceci:

... 
    //on Success 
    function(query, result){ 
    setTimeout(function(){ //just in case Ajax took a while too.. 
     var executeBatch = function(startIndex){ 
      for(var i = startIndex; i < startIndex+50; i++){ 
       if(i >= data.length) return; 
       //do your execute query on data[i].. 
      } 
      //after short while do the next batch.. 
      setTimeout(function(){ executeBatch(startIndex+50) }, 50); 
     }; 
     executeBatch(0); 
    }, 100); 
    } 
); 
+0

C'est exactement ce dont j'avais besoin. Merci. – sissonb

Questions connexes