JQuery AJAX刷新多个Div(重复刷新)

时间:2016-02-24 17:35:22

标签: javascript php jquery mysql ajax

我花了几个小时在这里寻找答案,但我找不到答案。我的自动刷新工作,问题是它刷新彼此内部的所有div。例如,我有一个计算机辅助调度应用程序,它具有可用单元,分配的呼叫和待处理呼叫的分区,但是当它刷新时,它将所有这三个div放入彼此的所有三个中!

var auto_refresh = setInterval(
function () {
    $('#avunits').load('supervisor.php #avrefresh');
}, 5000);

另一个问题是我试图用多重div语法来做它们但是只能在第一个div上工作而忽略其他两个:

var auto_refresh = setInterval(
function () {
    $('#avunits,#assigned,#pending').load('supervisor.php .refresh');
}, 5000);

在第二个示例中,它将所有三个div放入可用单位div中,但不会更新已分配或待处理的。

最后,我已尝试在同一个中完成所有这三项工作,但仍然无法正常工作:

var auto_refresh = setInterval(
function () {
    $('#avunits').load('supervisor.php #avrefresh', function (){
        $('#assigned').load('supervisor.php #avrefresh', function (){
            $('#pending').load('supervisor.php #penrefresh');
})})}, 5000);

我想要它做的是刷新所有三个div并将它们分开。

相关代码:

    // All of the code is within the same webpage. I plan to separate them to their own pages once everything works.
// This is the working version. Currently, the AVRefresh works, but if I do what I said in my Stack Overflow post, it doesn't work.

<head>
    <?if($_GET['info'])
    {   }
    else
    {?>
        <script src="java/jquery.js"></script>
        <script type="text/javascript">
        var auto_refresh = setInterval(
        function () {
             // If I use "#avunits" after supervisor.php it embedds a second DIV. So, I made a new one so as to not mess up my CSS
            $('#avunits').load('supervisor.php #avrefresh');
            }, 5000);
        </script>
    <?}?>       
    <title>WebCAD Dispatch</title>
    <link rel="stylesheet" type="text/css" href="supervisor_base.css">
    <link rel="stylesheet" type="text/css" href="callview_assigned.css">
    <link rel="stylesheet" type="text/css" href="callview_pending.css">
</head>
<body>



// (Continued)


<div id="background">
    <div id="fixedwidth">
        <div id="sidebar">
            <div id="avunits">
                <div id="avrefresh">
                        // Various MySQL Queries
                        // If the user is a supervisor, staff, or admin, and is not banned and approved.
                        {
                            if(isset($_GET['info']) || isset($_GET['refresh']))
                            {
                                // Various MySQL Queries                                    
                                // HTML/PHP Readouts/Echoes

                            }
                            else
                            {
                                // Various MySQL / PHP / HTML Codes that retrieve the users
                                // And prints out all units, and if busy, their status and Call#
                            }
                        }
                        else
                        {
                            // Javascript back to index.php for login prompt
                        }
                </div>
            </div>
            <div id="callview">
                <div id="assigned">
                    <div id="assigned_refresh">
                        // Various MYSQL/PHP Calls to retrieve incident information and assigned units (if any)
                    </div>
                </div>
                <div id="pending">
                    <div id="pending_refresh">
                        // Various MYSQL/PHP Calls to retrieve incident information
                    </div>
                </div>
            </div>
        </div>
    </div>
 </div>

// (Continued)

</body>

我删除了不相关的MySQL / PHP代码以保护应用程序的完整性。

2 个答案:

答案 0 :(得分:1)

听起来您正在尝试加载一个页面,然后使用加载页面的不同片段替换页面的不同片段。除非您想要三次加载同一页面,否则您无法使用load()完成此操作。相反,您需要使用$ .get()并自行更新片段:

$('#avunits').load('supervisor.php #avunits_refresh');
$('#assigned').load('supervisor.php #assigned_refresh');
$('#pending').load('supervisor.php #pending_refresh');

如果绝对必须使用load,则需要单独和明确地处理每个片段。正如Xorifelse的回答中所提到的,与许多jQuery方法不同,get()运行第一个匹配的元素,并忽略其余的。所以如果你使用$(&#34; .refresh&#34;)。get()只有类的第一个元素&#34;刷新&#34;将会更新。

{{1}}

答案 1 :(得分:0)

我不确定您要使用'supervisor.php .refresh'$('#.refresh'),来自supervisor.php #avrefresh的if then else子句,还是最奇怪的$('#avunits,#assigned,#pending').load('supervisor.php .refresh'); }, 5000);来完成您要完成的工作}

它完全符合您的说法。将 这些div #avunits,#assigned,#pending中的HTML代码更改为load('supervisor.php .refresh')的输出

然而,我甚至不确定jQuery是否将此作为有效输入,并且可能会选择找到的第一个元素并跳过其余部分,对于加载函数,我不会冒险猜测从哪里获得该文档。如下面的评论所示,它最多需要一个html ID,而不是一个类,并忽略文档中陈述的其余部分(甚至是你的选择器)。

load()需要有效的网址。如果你想用supervisor.php做不同的事情,你应该通过load('supervisor.php?action=assigned')使用有效的URL,并通过执行if($_GET['action'] == 'assigned'){} elseif($_GET['action'] == 'pending'){} else {//code for malicous data}等等来在PHP脚本中使用if / else子句对它们进行分类。返回不同的输出。

如果用户将恶意数据发送到ajax请求,则此示例中的else语句应该是一个操作。

警告

如果您不更改load()网址,则jQuery甚至浏览器都有可能缓存响应。您需要清除缓存或使用带有$_GET请求的链接来分隔缓存。