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

По сути, 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 раз - Books.php перезагружает BooksPages.php 12 раз.

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

Спасибо заранее,

0
James Hudson 8 Окт 2018 в 06:28

2 ответа

Лучший ответ

Как говорит @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>
1
Shidersz 8 Окт 2018 в 04:02

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

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

0
Zim 8 Окт 2018 в 03:38