Как избежать тайм-аутов на iPhone - PullRequest
1 голос
/ 09 декабря 2010

Я ищу хорошую стратегию для вставки около 2500 идентификаторов firstName lastName (600KB) из вызова AJAX.Тайм-аут происходит после завершения вызова AJAX и пока я храню данные в базе данных localalstorage.Данные в формате XML.То, что я сейчас делаю, - это преобразование данных XML в объект, выполнив jQuery.each () над данными с этим,

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 Ответ

1 голос
/ 10 декабря 2010

Прав ли я, думая, что "данные" - это массив?Если это так, вы можете сделать что-то вроде этого:

  ...
  //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);
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...