LINUX.ORG.RU

Как в ajax ждать пока элемент полностью загрузится?

 , ,


0

3

Нужно пройтись по всему списку элементов с классом product, на каждом из них вызвать post запрос на загрузку контента для этого элемента. Проблема в том, что контент не успевает полностью загрузится а уже идет переход к следующему элементу... Как исправить? (на самом деле таких элементов 738, в примере укоротил просто)

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>

<script>
$(function() {
$('div.product').each(
function(i, elem) {
if ($(this).hasClass("stop")) {
return false;
} else {
var ii = $(elem).find('#sindex').text();
var c = $(elem).find('#category').text();
var s = $(elem).find('#subcategory').text();
var t = $(elem).find('#title').text();
var u = $(elem).find('#url').text();
$(elem).load(
"parser.php",
{
pi: ii,
pc: c,
ps: s,
pt: t,
pu: u
},function(){alert('end')});
}
});
});
</script>
</head>
<body>
	<div class="product">
		<div id="sindex">1</div>
		<div id="category">63</div>
		<div id="subcategory">71</div>
		<div id="title">Станок шиномонтажный полуавтоматический R 745</div>
		<div id="url">https://...</div>
	</div>
	<div class="product">
		<div id="sindex">2</div>
		<div id="category">63</div>
		<div id="subcategory">71</div>
		<div id="title">Станок шиномонтажный полуавтоматический R 980 XR</div>
		<div id="url">https://...</div>
	</div>
	<div class="product">
		<div id="sindex">3</div>
		<div id="category">63</div>
		<div id="subcategory">71</div>
		<div id="title">Станок шиномонтажный полуавтоматический R 980
			NXT</div>
		<div id="url">https://...</div>
	</div>
	<div class="product stop">
		<div id="sindex">4</div>
		<div id="category">63</div>
		<div id="subcategory">71</div>
		<div id="title">Станок шиномонтажный автоматический R 76 LT</div>
		<div id="url">https://...</div>
	</div>
</body>
</html>


делай setInterval и чекай существование элемента...
А вообще юзай phantomjs + тот же php к примеру

noname_user ★★★ ()
Последнее исправление: noname_user (всего исправлений: 1)

Если я все правильно понял, тебе нужны promise.

Делаешь запрос, ждешь пока он зарезолвится, делаешь следующий.

Deleted ()
Последнее исправление: Bizun (всего исправлений: 1)

Проблема в том, что контент не успевает полностью загрузится а уже идет переход к следующему элементу...

Это не проблема, а так и должно быть.

no-such-file ★★★★★ ()

Как исправить? (на самом деле таких элементов 738

Желательно никак. Пхп, ейжекс, жиквери - тут просто комбо, все должны страдать.

nikolnik ★★★ ()

Ты что-то делаешь не так, раз у тебя надо сделать 738 запросов. Делай серверсайд-рендеринг этого.

Deleted ()

Попробуй не AJAX. Просто грузи всё синхронно.

Infra_HDC ★★★★★ ()
Ответ на: комментарий от Deleted

Ты что-то делаешь не так, раз у тебя надо сделать 738 запросов.

Нет, это не вывод контента пользователю, тут все правильно. Это хтмл в котором находится список спарсенных товаров, так вот, я хотел написать аякс-скрипт, который поочередно пройдется по всему списку, и отправит каждый элемент списка скрипту на пхп, пхп принимаемый элемент грузанет в базу. Почему на аяксе? Потому что пхп сдохнет прежде, чем пройдется по всему списку сам (если только время работы скрипта в пхпини увеличивать), а на аяксе это можно сделать как-то поочередно, один элемент в базу загрузился, ответ от пхп получили, и переходим к след. элементу списка, опять направляем его в пхп для загрузки, как-то так... foozzi Bizun no-such-file nikolnik Infra_HDC

shiva ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.