Чрезмерное обновление страницы с помощью JQuery - PullRequest
0 голосов
/ 08 октября 2018

У меня есть следующая настройка кода: (для универа).

По сути, Books Store.php предназначен для обновления и отображения списка книг каждые 5 минут.

// Book Store.php
<head>
    <script 
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
</script>
</head>
</body>
    <div class = "container-fluid">
    <div id = "Books"></div>
</body>
<script>
    $(document).ready(function () {
        Books();
        setInterval(Books, 300000);
        $.ajaxSetup({cache: true});
    });
    function Books() {
        $("#Books").load("php/Books.php");
    }
</script>

В свою очередь, Books.php предназначен для обновления и отображения списка страниц книги каждые 30 секунд.

// Books.php
// Get List of books from MySQL

// FOR EACH BOOK .....
<div id = "BookPages"></div>

<script>
    $(document).ready(function () {
        BookPages();
        setInterval(BookPages, 30000);
        $.ajaxSetup({cache: true});
    });
    function BookPages() {
        $("#BookPages").load("php/BookPages.php");
    }
</script>
//  CLOSE FOR LOOP

При первой загрузке страницы все работает нормально, пока BooksStore.php не попытается перезагрузить список книг.Что происходит, так это то, что Books.php будет перезагружаться корректно, но BooksPages.php будет перезагружаться несколько раз.

Перезагружается BookStore 2 раза - Books.php перезагружает BooksPages.php 2 раза.

BookStoreПерезагрузка 3-е время - Books.php перезагрузит BooksPages.php 6 раз.

BookStore Перезагрузка 4-е время - Books.php перезагрузит BooksPages.php 8 раз.

BookStore перезагрузка 5-е время - Книги.php будет перезагружать BooksPages.php 12 раз.

И так до тех пор, пока сервер не начнет замедляться и не хватает ресурсов .... ???Почему это происходит / как это исправить.

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Как говорит @Zim, попробуйте с помощью clearInterval () проверить, работает ли теперь ваш код, как ожидалось:

BookStore.php

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>

<body>
    <div class="container-fluid">
        <div id="Books"></div>
    </div>

    <script>
        var int1;

        $(document).ready(function()
        {
            if (int1)
                clearInterval(int1);

            Books();
            int1 = setInterval(Books, 300000);
            $.ajaxSetup({cache: true});
        });

        function Books()
        {
            $("#Books").load("php/Books.php");
        }    
    </script>
</body>

Books.php

<div id="BookPages"></div>

<script>
    var int2;

    $(document).ready(function()
    {
        if (int2)
            clearInterval(int2);

        BookPages();
        int2 = setInterval(BookPages, 30000);
        $.ajaxSetup({cache: true});
    });

    function BookPages()
    {
        $("#BookPages").load("php/BookPages.php");
    }
</script>
0 голосов
/ 08 октября 2018

На самом деле Store.php инициализирует вызов функции Books () каждые 5 минут.Поэтому каждый раз он создает новое расписание для BookPages, если только вы не очистите предыдущее с помощью функции clearInterval().Поэтому перед вызовом функции Books() вы должны очистить расписание BookPages().

. Вы можете узнать, как использовать clearInterval() по этой ссылке: clearInterval w3schools

...