Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.02.2015, 13:07
Новичок на форуме
Отправить личное сообщение для Js_Skriptor Посмотреть профиль Найти все сообщения от Js_Skriptor
 
Регистрация: 12.02.2015
Сообщений: 3

Скрипт подгрузки контента не правильно работает на нескольких страницах, битрикс.
Добрый день, нужна помощь при работе со скриптом.
Скрипт подгружает контент следующей страницы, в данном случае по 9 элементов.
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?CJSCore::Init(array("jquery"));?>
<?
$arResult["NavQueryString"] = str_replace('&amp;','&',$arResult["NavQueryString"]);
$do = preg_match('/.*bxajaxid=(\S+).*/',$arResult["NavQueryString"],$bxajaxid);
?>

<script>
	var ajax_nav =  {'NavShowAlways':true,'NavTitle':'Товары','NavRecordCount':'31','NavPageCount':'4','NavPageNomer':'4','NavPageSize':'9','bShowAll':false,'NavShowAll':false,'NavNum':'1','bDescPageNumbering':false,'add_anchor':'','nPageWindow':'5','bSavePage':false,'sUrlPath':'/catalog/3567/','NavQueryString':'bxajaxid=eb7a0314a992bd489b709fe055063bee','sUrlPathParams':'/catalog/3567/?bxajaxid=eb7a0314a992bd489b709fe055063bee&','nStartPage':'1','nEndPage':'4','NavFirstRecordShow':'28','NavLastRecordShow':'31'};
	var bxajaxid = "";
</script>

<?  
if(!$do)
{?>
<div id ='ajax_nav'></div>
	<script type="text/javascript">
		/* isset for javascript */
		window.isset = function()
		{
			if (arguments.length===0) return false;
			var buff=arguments[0];
			for (var i=0; i<arguments.length; i++)
			{
				if (typeof(buff)==='undefined') return false;
				buff = buff[arguments[i+1]];
				
			}
			return true;
		} 
		BX.ready(
 			function()
			{
				$(window).scroll(
					function()
					{
						if($(window).scrollTop()+$(window).height()+100>=$('#ajax_nav').offset().top)
						{
							if (ajax_nav.NavPageCount > ajax_nav.NavPageNomer )
							{
								//ajax_nav.NavPageCount содержит количество страниц
								//ajax_nav.NavPageNomer всегда 1
								//ajax_nav.NavNum всегда 1
								//bxajaxid уникальный идентификатор
								if(bxajaxid.length == "")
								{
									
									bxajaxid = $('#ajax_nav').parents("div[id*='comp_']").attr('id').replace('comp_','');
									url = location.pathname+'?PAGEN_'+ajax_nav.NavNum+'='+(parseInt(ajax_nav.NavPageNomer)+1)+'&bxajaxid='+bxajaxid+'&'+ ajax_nav.NavQueryString;
								}
								else
								{									
								
									url = location.pathname+'?PAGEN_'+ajax_nav.NavNum+'='+(parseInt(ajax_nav.NavPageNomer)+1)+'&'+ ajax_nav.NavQueryString;
								}
								if (!isset(window, "ajax_sent"))
								{
									ajax_sent = true;
									$('#ajax_nav').addClass('bx-core-waitwindow'); 
									$.get(url,function(data)
										{
											$('#ajax_nav').removeClass('bx-core-waitwindow');
											bxajaxid = $('#ajax_nav').before(data);
											ajax_sent = false;
										});
								}
 								else if (ajax_sent == false)
								{
									ajax_sent = true;
									$('#ajax_nav').addClass('bx-core-waitwindow');
									$.get(url,function(data)
										{
											$('#ajax_nav').removeClass('bx-core-waitwindow');
											bxajaxid = $('#ajax_nav').before(data);
											ajax_sent = false;											
										});
								}
							}
						}
					});
			}
			); 
	</script>

<?}?>


Проблема состоит в том, что на некоторых страницах происходит подгрузка только 2-3 страниц, а на самом деле их больше, или не происходит ajax запроса! Подскажите в каком направлении двигаться.
В одном разделе все работает правильно в другом нет, возможно что то не предусмотрел.
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2015, 15:10
Новичок на форуме
Отправить личное сообщение для Js_Skriptor Посмотреть профиль Найти все сообщения от Js_Skriptor
 
Регистрация: 12.02.2015
Сообщений: 3

Заметил еще такой момент, если внести в get параметр значение
?PAGEN_1=10 тогда все последующие страницы начинают подгружаться, если значения от 1 до 9 подгрузки не происходит. А на страницах где подгружается все как положено, если указать get от 2 до 9 то подгрузки тоже не происходит.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2015, 12:23
Новичок на форуме
Отправить личное сообщение для Js_Skriptor Посмотреть профиль Найти все сообщения от Js_Skriptor
 
Регистрация: 12.02.2015
Сообщений: 3

Нужна помощь в отладке.

<div id="insertContent">
	<?$APPLICATION->IncludeFile("/catalog/element.php");?>
	</div>
	<a class="show-more" href="#" ></a>	 
</div>



<script>
$(document).ready(function(){
    //путь к файлу с компонентом. Указываем параметр
    var path = "/catalog/element.php?ajax=Y";
    //счетчик страниц
    var currentPage = 1;
	var SECTION_ID = <?=CUtil::PhpToJSObject($_REQUEST["SECTION_ID"])?>;
	var SECTION_CODE = <?=CUtil::PhpToJSObject($_REQUEST["SECTION_CODE"])?>;
	var ELEMENT_SORT_FIELD = <?=CUtil::PhpToJSObject($_REQUEST["ELEMENT_SORT_FIELD"])?>;
	var ELEMENT_SORT_ORDER = <?=CUtil::PhpToJSObject($_REQUEST["ELEMENT_SORT_ORDER"])?>;
	var PAGE_ELEMENT_COUNT = <?=CUtil::PhpToJSObject($_REQUEST["PAGE_ELEMENT_COUNT"])?>;
	
	
	var NavPageCount = <?=CUtil::PhpToJSObject($_REQUEST["NavPageCount"])?>;
	var pageGet = <?=CUtil::PhpToJSObject($_GET)?>;
$(window).scroll(function(e){
	var inProgress = false;
if($(window).scrollTop()+($(window).height()+900)>=$(document).height() && !inProgress)
{
	inProgress = true;
	$(".show-more").addClass("WaitWindow"); 
        $.get(
		path, 
		{PAGEN_1: ++currentPage, SECTION_ID: SECTION_ID, SECTION_CODE: SECTION_CODE, ELEMENT_SORT_FIELD:ELEMENT_SORT_FIELD, ELEMENT_SORT_ORDER:ELEMENT_SORT_ORDER, PAGE_ELEMENT_COUNT: PAGE_ELEMENT_COUNT, NavPageCount: NavPageCount, pageGet: pageGet},
		function(data){
            $("#insertContent").append(data);
			inProgress = false;
			$(".show-more").removeClass("WaitWindow");
        });
}		
        e.preventDefault();
    });
});</script>


При данной работе скрипта, если пользователь резко дергает страницу происходит много запросов, и сервер отключает такого пользователя на 5 минут, подскажите как сделать так что бы пока отправляется запров, второй запрос не отправлялся.
Пробовал добавить переменную inProgress.

И второй вопрос, как остановить запросы к файлу если все элементы уже выведены?
код примерно такой
if(!isset($_GET["NavPageCount"]) || ($_GET["NavPageCount"] >= $_GET["PAGEN_1"])){
//выполняем запрос и возвращаем на страницу элементы
}
else{
//закончились элементы
//вернуть параметр, что бы script js перестал делать запросы
//именно здесь я не знаю что сделать
}


Подскажите как сделать
Ответить с цитированием
  #4 (permalink)  
Старый 16.02.2015, 21:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

> как сделать так что бы пока отправляется запров, второй запрос не отправлялся

Самое простое, это добавить флаг, то есть условие на запрос не только позиция прокрутки документа, но и разрешение этого флага:

var perm = 1; //изначально запрос разрешен
//перед запросом сбрасываем флаг
perm ^= 1;
//получили ответ сервера, обработали, разрешаем следующий запрос
perm ^= 1;


То что элементы закончились клиент должен знать, значит тоже следить за этим надо. Можно при первом запросе выдать общее его количество за минусом порции, а при каждом вычитать эту порцию. Либо последний запрос вернул пустой результат, запомнить его.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт не работает в FF и опера, но работает в IE(в чем дело???) Cepera Firefox/Mozilla 1 24.08.2012 16:46
Скрипт правильно работает только один раз, после начинает выдавать ошибку. xodock Events/DOM/Window 2 23.07.2012 13:04
Не правильно работает скрипт. Julia Panatova Общие вопросы Javascript 2 18.01.2011 15:30
Скрипт правильно работает только в IE! [ANTI]CheateR Общие вопросы Javascript 3 01.12.2010 21:32
скрипт не работает на сервере, на домашней машине отличн работает... ffx Общие вопросы Javascript 10 15.05.2009 11:53