Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите победить функции ) (https://javascript.ru/forum/dom-window/68737-pomogite-pobedit-funkcii.html)

-FIXER- 06.05.2017 00:22

Помогите победить функции )
 
Всем привет. Помогите разобраться.:help:
Делаю расширение с парсингом некоторой информации с сайта на котором присутсвует динамический поиск по товарам.
Логика построена таким образом, что программа пробегает по странице, собирает нужные товары, нажимает на кнопку "следующая страница" и затем собирает дальше товары. При всём этом сама страница сайта не обновляется полностью, а лишь подгружаются новые товары вместо старых с помощью js
Вопросов сразу два.
1. Как сделать, чтобы функция(действие, или ещё что-то) выполнялось после того как загрузятся динамические элементы после клика на кнопку "следующая страница". (т.е. не сама страница, а только элементы. document.addEventListener('DOMContentLoaded', function (){бла-бла-бла}) не работает.)
2. Решил реализовать это через setinterval выставил 2000, за 2 секунды всегда элементы успевают подгружаться. Но появилась проблема. setInterval требует вызов функции(в моём случае функция парсинга товаров), а функции, насколько я знаю, подгружаются перед выполнением всего скрипта и единожды. т.е. если я во время выполнения скрипта переключаю на другую вкладку(на другую страницу), то в функции остаётся спаршенна первая страница товаров. Что только не пробовал, сколько бы страниц не прогонял, всегда парсится только первая.:help:
Заранее благодарю=)

Diphenyl Oxalate 06.05.2017 09:22

Повесить колбек на XMLHttpRequest-объект, который подгружает данные со следующей страницы.

-FIXER- 06.05.2017 10:43

Спасибо, не знал что в расширениях можно post-get запросы посылать. А можно их посылать на другой домен? И если да, то что в манифесте надо прописать?

-FIXER- 06.05.2017 11:32

А ещё момент подскажите. Не пойму немного логику. Почему o = 1, после выполнения кода. По логике o=i=9 должно быть
var post = "";
var o=0;
var "xhr" = new XMLHttpRequest();
label1: for(i=0;i<10;i++){
	"xhr".open('post', '/shop', true);
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем кодировку
	xhr.send("order=-1&skip="+i+"&filter=&range=0&_csrf=SrEaDkdk-wbKC_2ju0-20gTDo2NY572KMVJ4"); // Отправляем POST-запрос

	 xhr.onreadystatechange = function() { // Ждём ответа от сервера
		if (xhr.readyState == 4) { // Ответ пришёл
			if(xhr.status == 200) { // Сервер вернул код 200 (что хорошо)
				//if(xhr.responseText=="[]") break label1;
				post=post+xhr.responseText;
				o++;
			}		}
		
	};
}

-FIXER- 06.05.2017 19:21

Цитата:

Сообщение от Rise (Сообщение 451758)
-FIXER-, так значение csrf формируется при загрузке страницы, оно будет разным каждый раз, а без правильного значения csrf очевидно данные не отправятся сервером, так как он проверяет его, оно для этого и передается сюда и обратно. И не понял про переключение между вкладками, если идет динамическая подгрузка контента на одной странице, причем здесь другие вкладки?

По поводу вкладок, их нет. Они использованы в другом месте этого сайта но к делу не относятся. Прошу меня извинить за введение в заблуждение =).
А значение csrf не формируется при загрузке страницы каждый раз. Если не ошибаюсь этот параметр меняется каждый раз при смене куков, т.е. при перелогинивании на сайт. Это подтверждается ещё и тем, что я могу не реализовывая цикл вручную сделать 10 запросов, меняя лишь skip и не трогая csrf, и всё будет успешно. Тут какая-то другая проблема. Возможно сайт не воспринимает больше одного запроса в секунду(или в n миллисекунд). Не знаю, может ли такое быть.


Часовой пояс GMT +3, время: 08:17.