KorP
@KorP
Кратко о себе

Как обновить страничку, получаемую при помощи подгрузки ajax`ом?

Есть небольшой скриптик для закладок

function show(name)<br>
{<br>
	$.post("include/"+name+".php",<br>
		function(data) {<br>
			$('#content').empty().append(data);<br>
		}<br>
	);<br>
	return false;<br>
}<br>


Есть задача — некоторые из этих страниц рефрешить с определённым интервалом времени. Попробовал напистаь нечто типа:

function refresh()<br>
{<br>
	window.location.reload();<br>
}<br>
<br>
function show(name)<br>
{<br>
	$.post("include/"+name+".php",<br>
		function(data) {<br>
			$('#content').empty().append(data);<br>
		}<br>
	);<br>
<br>
	if (name == 'page')<br>
		window.setTimeout(refresh,7000);<br>
<br>
	return false;<br>
}<br>


но косяк в том что кол-во запросов увеличивается в 2 раза с каждой перезагрузкой страницы. Есть ещё один ньюанс — в теле основной страницы, куда подгружается контент в теле указано

show('page');<br>

что бы при первом входе на страницу открывалась нужная «дефолтная» вкладка, и соответственно даже если я с неё перехожу куда то ещё — меня рефрешит на дефолтную страницу.

Помогите пожалуйста идеей или решением, я в JS не силён совсем.
  • Вопрос задан
  • 5571 просмотр
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Есть блок #content, через setTimeout создаем цикл, в цикле делаем AJAX Запрос в котором молучаем HTML и заменяем им содержимое блока #content. Можно так же использовать метод .load ($('#content').load(url)) опять же в цикле через setTimeout
Ответ написан
Комментировать
Во-первых, зачем обновлять страницу?
Во-вторых, если устанавливаете timeout, то нужно ставить заглушку от его повторного вызова через clearTimeout.
Ответ написан
taliban
@taliban
php программист
window.setTimeout(function(){ show('name') },7000);
Ответ написан
@balloon
var tabs = {

    autorefresh: {
        page1: 15, // обновляет табу `page1` каждые 15 секунд
        page2: 30
    },

    timers: {},

    /**
     * Отображаем табу и сразу же подписываем ее на автообновление если оно для нее предусмотрено
     * @param tabName
     */
    show: function(tabName) {
        $.post("include/"+name+".php", function(content) {
            // @todo Еже ли есть автообновление то думаю нужно кешить контент и обновляеть его только по таймауту
            $('#content').empty().html(content);
            // reschedule autorefresh
            tabs.scheduleAutorefresh(name);
        });
    },

    /**
     * Делаем рефреш страниц
     * @param tabName
     */
    scheduleAutorefresh: function(tabName) {
        // если у нас есть не отработаный таймаут для этой табы, то его нужно очистить перед тем как создавать новый
        if (typeof(tabs.timers[tabName]) !== 'undefined')
            clearTimeout(tabs.timers[tabName]);

        // проверяем есть ли автообновление у табы
        if (typeof(tabs.autorefresh[tabName]) !== 'undefined') {
            tabs.timers[tabName] = setTimeout(function() {
                tabs.show(tabName);
            }, tabs.autorefresh[tabName] * 1000);
        }
    },

    /**
     * Тут мы показываем дефолтную табу при загрузке страницы
     * + Можем подписать некоторые табы на автообновления (даже если пользователь еще ни разу их не открыл)
     * @param defaultTab
     */
    init: function(defaultTab) {
        tabs.show(defaultTab);
//        $.each(tabs.autorefresh, function(tabName) {
//            tabs.scheduleAutorefresh(tabName);
//        });
    }
};

tabs.init('defaultTabName');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы