Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.02.2015, 17:19
Аспирант
Отправить личное сообщение для solomon2 Посмотреть профиль Найти все сообщения от solomon2
 
Регистрация: 10.01.2012
Сообщений: 39

Выполнение кода с интервалами
При загрузке страницы со нее собираются все ссылки в массив.
Далее ссылки необходимо частями отправить на сервер ajax-ом, с интервалами между каждой 10-й отправкой, чтобы не вешать страницу браузера, т.к. от сервера еще получается ответ по каждой из ссылок. (10 ссылок отправили, перерыв 5 секунд, далее следующие 10 и т.д.)

Ниже код, никак не могу разобраться как верно написать. В текущем варианте код не попадает в эту часть if(i !=0 && i%10==0). Помогите, пожалуйста, разобраться, мозги уже плавятся..

var nCut = 0,
	hrefArr2 = [];

cutDatalinks('');

function cutDatalinks(hrefArr2){
	var cutHrefArr = []; // минимассив для отправки ссылок частями
	if(hrefArr2==''){
		hrefArr2 = hrefArr; // hrefArr - массив со всеми ссылками собранными со страницы
	}
	for(i=nCut;i<hrefArr2.length;i++){
		if(i==10){
			//ставим интервал через который запустить эту же функцию
			var cutInterval = setInterval(cutDatalinks(hrefArr2), 5000);		
		}
		if(i==hrefArr2.length-1){
			//прекратить работу интервалов
			clearInterval(cutInterval);
			//передаем минимассив cutHrefArr в метод, который направляет ссылки серверу
			getData('', '', cutHrefArr);
			//обнуляем минимассив cutHrefArr
			cutHrefArr.length = 0;
			nCut = 0; //устанавливаем начало счетчика
		}
		cutHrefArr.push(hrefArr2[i]);
		console.log('1 - ' + i);
		if(i !=0 && i%10==0){// целое число
			console.log('2 - ' + i);
			//передаем минимассив cutHrefArr в метод, который направляет ссылки серверу
			getData('', '', cutHrefArr);
			//обнуляем минимассив cutHrefArr
			cutHrefArr.length = 0;
			nCut = nCut + 10; //устанавливаем начало счетчика
			break;
		}
	}
}

Последний раз редактировалось solomon2, 09.02.2015 в 17:55.
Ответить с цитированием
  #2 (permalink)  
Старый 09.02.2015, 23:18
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от solomon2
никак не могу разобраться как верно написать
Как вариант...

(function(){
	var arr=[1,2,3,4,5,6,7,8,9];
	var n=5;
	var l=arr.length;
	var start=0;
	setTimeout(sendData,1000);
	function sendData(){
		var end=start+n;
		end=(end>l)? l: end;
		var a=arr.slice(start,end);
		alert('Шлем '+a);
		start=end;
		if (start<l) {
			setTimeout(sendData,1000);;
		};
	};
})();

Последний раз редактировалось ksa, 10.02.2015 в 09:54.
Ответить с цитированием
  #3 (permalink)  
Старый 10.02.2015, 09:42
Аспирант
Отправить личное сообщение для solomon2 Посмотреть профиль Найти все сообщения от solomon2
 
Регистрация: 10.01.2012
Сообщений: 39

Огромное Вам спасибо!

Небольшой баг:
start+=end;

Верно будет:
start=end;
Ответить с цитированием
  #4 (permalink)  
Старый 10.02.2015, 09:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,227

Сообщение от solomon2
Верно будет:
start=end;
Да, да...
Исправил.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дождаться завершения функции и продолжить выполнение кода XRASER Events/DOM/Window 4 10.04.2014 16:39
выполнение кода в динамическом блоке Nagisa AJAX и COMET 3 31.08.2012 14:18
Пошаговое выполнение кода KamalovRadik jQuery 2 28.10.2011 20:46
При выполнение строки кода вылетаю из функции. developer_ Events/DOM/Window 3 28.07.2011 00:45
Последовательное выполнение кода avtor01 AJAX и COMET 6 29.10.2008 19:06