Обновите DIV с помощью Javascript и ограничьте время - PullRequest
2 голосов
/ 02 апреля 2012

Я использую следующий JavaScript для обновления div на странице каждые 30 секунд:

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(function(){
    $(document).ready(function(){
        $.ajaxSetup({cache: false});
    });
    getStatus();
});
function getStatus() {
    $('div#content').load('ajax_stream.php').fadeIn("slow");
    setTimeout("getStatus()",30000);  // refresh every 30000 milliseconds (30 seconds)
}
</script>

Мне приходит в голову, что должна быть какая-то форма ограничения, чтобы через 'n' минут мы перестали обновлять div - то есть, если пользователь оставляет свой браузер открытым навсегда, мы не просто продолжаем потреблять ресурсы сервера.

Как мне этого добиться? Кроме того, если бы я хотел вызвать новый файл в DIV по истечении времени ожидания, какой метод лучше всего подходит?

Ответы [ 4 ]

5 голосов
/ 02 апреля 2012

может быть, вы могли бы просто сохранить время ожидания и проверить, меньше ли время в миллисекундах, чем время в минутах, которое вы хотите остановить сценарием?

var timerunning;
...
timerunning = timerunning + 30000;
if(timerunning < 120000){
    setTimeout("getStatus()",30000); 
}

не проверял хотя, удачи:)

3 голосов
/ 02 апреля 2012

Как насчет этого решения?

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
    var statusUpdateTimeout = null;
    $(function(){
        $(document).ready(function(){
            $.ajaxSetup({cache: false});
        });

        // Run get status and repeat every 30 seconds
        getStatus();
        statusUpdateTimeout = setInterval("getStatus()", 30000);

        // Stop updating after 15 minutes
        setTimeout(function() {
            if(statusUpdateTimeout) clearInterval(statusUpdateTimeout);
        }, 900000);
    });

    function getStatus() {
        $('div#content').load('ajax_stream.php').fadeIn("slow");
    }
</script>

Я заменил setTimeout на setInterval и переместил его за пределы функции getStatus. Также я установил новый тайм-аут, который остановит интервал через 15 минут.

Кроме того, для дальнейшего использования, пожалуйста, сделайте отступ в своем коде, чтобы его могли прочитать другие.

0 голосов
/ 03 апреля 2012

Вот как это сделать:

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
//when the page loads, the user is idle for 0 seconds
var idle=0;
$(function(){
    $(document).ready(function(){
        $.ajaxSetup({cache: false});
    });
    getStatus();
});
function getStatus() {
    idle+=1;
    //if idle for 5 minutes, do nothing
    if (idle==10) return;
    $('div#content').load('ajax_stream.php').fadeIn("slow");
    setTimeout("getStatus()",30000);  // refresh every 30000 milliseconds (30 seconds)
}
//reset the counter whenever an activity is done on the page
$('body').mousemove(function(){
    idle=0;
});
</script>
0 голосов
/ 02 апреля 2012

Я думаю, что лучшее решение для вас - установить глобальную переменную, которая будет увеличиваться при каждом выполнении getStatus () , и установить ее обратно в 0 для $ ('body'). Mousemove () ; (это поведение, которое Gmail использует для установки статуса пользователя на IDLE в чате веб-почты Gmail)

...