我花了几个小时在这里寻找答案,但我找不到答案。我的自动刷新工作,问题是它刷新彼此内部的所有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代码以保护应用程序的完整性。
答案 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
请求的链接来分隔缓存。