在iPhone上避免超时

时间:2010-12-09 19:00:44

标签: javascript iphone timeout

我正在寻找一个好的策略来从AJAX调用中插入大约2500个id firstName lastName元组(600KB)。超时发生在AJAX调用完成后以及我将数据存储在localstorage数据库中时。数据采用XML格式。我现在正在做的是通过对数据执行jQuery.each()将XML数据转换为对象,

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

然后我将此对象传递给创建表并插入此数据的函数。该功能的主要部分是。

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

iPhone不支持网络工作者。应该有一种方法可以一次使用setInterval()和处理数据,但我遇到了困难。如果您有任何想法,请告诉我。

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为“数据”是一个数组吗?如果是这样,你可以这样做:

  ...
  //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);
  }
);