Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

Помогите пофиксить баги

Рекомендованные сообщения

угу

var timer = $('#elTimer');
var timerTime = timer.html();
var counter = timerTime;

setInterval(function() {
if (counter < 0) {
	counter = timerTime;
}
timer.html(counter);
counter -= 1;
}, 1000);

<span id="elTimer">10</span>

Поделиться сообщением


Ссылка на сообщение

Разве так правильно?

 

$(document).ready(function() {
   var gamenames = document.querySelectorAll('.copy');
   var table = document.querySelector('#gamelistTable');
   var names = new Clipboard(gamenames);

   var date = new Date();
   date.setTime(date.getTime() + (365 * 86400000));

   setInterval(function() {
       var updateUrl = table.getAttribute('data-update-url');
       var val = document.querySelector('input[name="only_lobby"]').checked;
       updateUrl += '&only_lobby=' + val;
       var botid_list = '';
       $('input:checkbox[name="botid[]"]:checked').each(function(){
           botid_list += $(this).val() + ',';
       });
       /*console.log(botid_list);*/
       updateUrl += '&botid_list=' + botid_list;
       console.log(updateUrl);
       ips.getAjax()(updateUrl).done(function (data) {
           table.querySelector('tbody').innerHTML = data;
           gamenames = document.querySelectorAll('.copy');
           names.destroy();
           names = new Clipboard(gamenames);
       });
   }, 5000);
});
$('#only_lobby').change(function() {
   if(this.checked) {
       var date = new Date();
       date.setTime(date.getTime() + (365 * 86400000));
       ips.utils.cookie.set('RunningGames_only_lobby', true, date.toUTCString());
   } else {
       ips.utils.cookie.unset('RunningGames_only_lobby');
   }
});
$('input:checkbox[name="botid[]"]').change(function() {
   if(this.checked) {
	var botid_list = '';
	var date = new Date();
	date.setTime(date.getTime() + (365 * 86400000));
       $('input:checkbox[name="botid[]"]:checked').each(function(){
           botid_list += $(this).val() + ',';
       });
       ips.utils.cookie.set('RunningGames_botid', botid_list += $(this).val() + ',', date.toUTCString());
   }
});

Поделиться сообщением


Ссылка на сообщение

        var val = document.querySelector('input[name="only_lobby"]').checked;
       updateUrl += '&only_lobby=' + val;
       var botid_list = '';
       $('input:checkbox[name="botid[]"]:checked').each(function(){
           botid_list += $(this).val() + ',';
       });
       /*console.log(botid_list);*/
       updateUrl += '&botid_list=' + botid_list;

Это Вам зачем, если Вы не используете параметры в php?

 

if(this.checked) {

var botid_list = '';

var date = new Date();

date.setTime(date.getTime() + (365 * 86400000));

$('input:checkbox[name="botid[]"]:checked').each(function(){

botid_list += $(this).val() + ',';

});

ips.utils.cookie.set('RunningGames_botid', botid_list += $(this).val() + ',', date.toUTCString());

}

Здесь Вы проверяете только одно состояние чекбокса

 

	$('input:checkbox[name="botid[]"]').change(function() {
	var botid_list = [];
	$('input:checkbox[name="botid[]"]:checked').each(function(){
		botid_list.push($(this).val());
	});

	ips.utils.cookie.set('RunningGames_botid', botid_list.join(','), date.toUTCString());
});

Поделиться сообщением


Ссылка на сообщение

Спасибо. Ваш вопрос про PHP не понял.

Поделиться сообщением


Ссылка на сообщение

Ваш вопрос про PHP не понял.

Зачем Вы передаете параметры index.php?app=sharedstats&module=stats&controller=RunningGames&do=ajax&only_lobby=true&botid_list=18,17,16,15,14,13,11,10,4,3,

если проверяете не их, а куки?

ajax

меняете

\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 200 );

на

\IPS\Output::i()->json(array('html' => \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 'games' => 5, 'players' => 10));

+

добавить id'шники для Total Games и Total Players

<div class="ipsType_minorHeading">Total Games: <span id="elTotalGames">10</span></div>
<div class="ipsType_minorHeading">Total Players: <span id="elTotalPlayers">28</span></div>

+ js

$(document).ready(function() {
var table = $('#gamelistTable');
var tableBody = table.find('tbody');
var names = new Clipboard('.copy');
var updateUrl = table.attr('data-update-url');
var elTotalGames = $('#elTotalGames');
var elTotalPlayers = $('#elTotalPlayers');
var date = new Date();

date.setTime(date.getTime() + (365 * 86400000));

setInterval(function() {
	ips.getAjax()(updateUrl).done(function (response) {
		tableBody.html(response['html']);
		elTotalGames.html(response['games']);
		elTotalPlayers.html(response['players']);
	});
}, 5000);

$('#only_lobby').change(function() {
	if(this.checked) {
		ips.utils.cookie.set('RunningGames_only_lobby', true, date.toUTCString());
	} else {
		ips.utils.cookie.unset('RunningGames_only_lobby');
	}
});

$('input:checkbox[name="botid[]"]').change(function() {
	var botid_list = [];

	$('input:checkbox[name="botid[]"]:checked').each(function(){
		botid_list.push($(this).val());
	});

	ips.utils.cookie.set('RunningGames_botid', botid_list.join(','), date.toUTCString());
});
});

Поделиться сообщением


Ссылка на сообщение

Спасибо большое за помощь, я вам памятник при жизни поставлю. Дело в том, что я не знаю программирования, только HTML и CSS. Со всем этим делом вожусь порядка 10 лет, начинал еще с юкоз. Выучить программирования так и не было времени, пилил свои проекты, как-то зарабатывал на жизнь... Чтением кода владею, но с написанием проблемы, вот пытаюсь что-то освоить, внимательно изучаю всю вашу информацию, я вам сильно надоел?

Поделиться сообщением


Ссылка на сообщение
09/08/18 20:13 (изменено)

Не работает ((( С куками всё супер, с обновлением на AJAX что-то.

 

Тамймер на секунду опаздывает почему-то.

 

$(document).ready(function() {
   var table = $('#gamelistTable');
   var tableBody = table.find('tbody');
   var names = new Clipboard('.copy');
   var updateUrl = table.attr('data-update-url');
   var elTotalGames = $('#elTotalGames');
   var elTotalPlayers = $('#elTotalPlayers');
   var date = new Date();
var timer = $('#elTimer');
var timerTime = timer.html();
var counter = timerTime;

   date.setTime(date.getTime() + (365 * 86400000));

   setInterval(function() {
       ips.getAjax()(updateUrl).done(function (response) {
           tableBody.html(response['html']);
           elTotalGames.html(response['games']);
           elTotalPlayers.html(response['players']);
       });
   }, 5000);

setInterval(function() {
    if (counter < 0) {
        counter = timerTime;
    }
    timer.html(counter);
    counter -= 1;
}, 1000);

   $('#only_lobby').change(function() {
       if(this.checked) {
           ips.utils.cookie.set('RunningGames_only_lobby', true, date.toUTCString());
       } else {
           ips.utils.cookie.unset('RunningGames_only_lobby');
       }
   });

   $('input:checkbox[name="botid[]"]').change(function() {
       var botid_list = [];

       $('input:checkbox[name="botid[]"]:checked').each(function(){
           botid_list.push($(this).val());
       });

       ips.utils.cookie.set('RunningGames_botid', botid_list.join(','), date.toUTCString());
   });
});

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

Используйте один setInterval с 1000. Если значение счетчика равно 0, делайте ajax-запрос

Поделиться сообщением


Ссылка на сообщение

Как правильней?

 

setInterval(function() {
	if (counter == 0) {
        ips.getAjax()(updateUrl).done(function (response) {
            tableBody.html(response['html']);
            elTotalGames.html(response['games']);
            elTotalPlayers.html(response['players']);
        });
       }
    if (counter < 0) {
        counter = timerTime;
    }
    timer.html(counter);
    counter -= 1;
}, 1000);

 

setInterval(function() {
    if (counter <= 0) {
        ips.getAjax()(updateUrl).done(function (response) {
            tableBody.html(response['html']);
            elTotalGames.html(response['games']);
            elTotalPlayers.html(response['players']);
        });
        counter = timerTime;
    }
    timer.html(counter);
    counter -= 1;
}, 1000);

Поделиться сообщением


Ссылка на сообщение
var ajaxObj = null;

setInterval(function() {
if (counter === 0) {
	if (ajaxObj != null) {
		return;
	}

	timer.html('Loading...');

	ajaxObj = ips.getAjax()(updateUrl)
		.done(function (response) {
			tableBody.html(response['html']);
			elTotalGames.html(response['games']);
			elTotalPlayers.html(response['players']);

			counter = timerTime;
			ajaxObj = null;
		})
		.fail(function() {
			window.location.reload();
		});
} else {
	timer.html(counter);
	counter -= 1;
}
}, 1000);

Поделиться сообщением


Ссылка на сообщение

Спасибо, всё супер. У меня сломалась выборка по фильтру после обновления на AJAX.

Поделиться сообщением


Ссылка на сообщение

У меня сломалась выборка по фильтру после обновления на AJAX.

Значит, где-то что-то не так.

Поделиться сообщением


Ссылка на сообщение

Я сделал такой вывод:

 

\IPS\Output::i()->json(array('html' => \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 'games' => $games, 'players' => $totalGames));

 

оно работает, но я не пойму почему. Если вставить любую другую переменную, например:

 

\IPS\Output::i()->json(array('html' => \IPS\Theme::i()->getTemplate('stats', 'sharedstats')->runningGamesList($games), 'games' => $gamesss, 'players' => $totalGamesss));

 

оно тоже работает.

Поделиться сообщением


Ссылка на сообщение

'games' => $games, 'players' => $totalGames

А тут вообще что?

Судя по runningGamesList($games), $games - это массив со списком игр.

Так зачем Вы его передаете в 'games' => $games

'games' => $games должно быть кол-во игр

'players' => $totalGames должно быть кол-во игроков

Поделиться сообщением


Ссылка на сообщение

Я просто для теста указал. Почему вариант который вы скинули с цифрами 5 и 10 - не работает, а мой с непонятными переменными работает?

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...