使用 JQuery 过度刷新页面

Excessive page refreshing with JQuery

我有以下代码设置:(对于 uni 项目)。

本质上,图书 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 第二次重新加载 - 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 次。

依此类推,直到服务器开始变慢并且 运行 资源耗尽.... ???为什么会发生这种情况/如何解决。

提前致谢,

实际上 Store.php 每 5 分钟初始化一次对 Books() 函数的调用。因此,每次它都会为 BookPages 创建一个新的计划,除非您使用函数 clearInterval() 清除前一个计划。因此,在调用 Books() 函数之前,您应该清除 BookPages().

的时间表

你可以从这个link学习clearInterval()的用法:clearInterval w3schools

如@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>