我有一个while循环表,显示来自我的数据库的信息。而我想要实现的是在每一行上发布通知,例如它有多少新的评论。
这是 while循环代码:
while ($row = mysql_fetch_array($result)) {
$cTicketNo=$row["cTicketNo"];
$vCategory=$row["vCategory"];
$cUsername=$row["cUsername"];
$cPCName=$row["cPCName"];
$dDateTimeCalled=$row["dDateTimeCalled"];
$vDepartment=$row["vDepartment"];
$cRStatus=$row["cRStatus"];
$nFollowup=$row["nFollowUp"];
$cUStatus=$row['cUStatus'];
$trID='p'.$i;
echo '<form action="Ticket-Assign.php" method="GET">';
echo "<tr id='$trID' onclick=\"highlightClicked('$trID','$maxi')\">";
echo "<td class='center'>$nFollowup</td>";
echo "<td id='ticket' class='center'>$cTicketNo</td>";
echo "<td class='center'>$vCategory</td>";
echo "<td class='center'>$cUsername</td>";
echo "<td class='center'>$cPCName</td>";
echo "<td class='center'>$dDateTimeCalled</td>";
echo "<td class='center'>[ <a id='comment' href='s_ViewAllActions.php?cTicketNo=$cTicketNo' onclick=\"highlightClicked('$trID','$maxi')\">Comment</a> ]</a><div id='noti_Counter'></div></td>";
}
如果你看看id为noti_Counter的div,那就是我想要通知计数器出现的地方。
这是 AJAX 代码:
$(document).ready(function(){
load_unseen_notification();
function load_unseen_notification()
{
var ticketno= $("#ticket").text();
$.ajax({
url:"check.php",
method:"GET",
data:{ticketno:ticketno},
dataType:'json',
success:function(data)
{
if(data.unseen_notification > 0)
{
$('#noti_Counter')
.css({ opacity: 0 })
.animate({ opacity: 1 }, 500);
}
}
});
}
setInterval(function(){
load_unseen_notification();
}, 5000);
});
这里是 check.php ,我只是缩小了它:
$cTicketNo = santize($_GET["ticketno"]);
$query_1 = "SELECT * FROM comments WHERE comment_status=0 AND cTicketNo='". $cTicketNo ."'";
$result_1 = mysql_query($query_1) or die (mysql_error());
$count = mysql_num_rows($result_1);
$data = ['unseen_notification' => $count];
);
echo json_encode($data);
任何人都可以帮忙,我是AJAX的新手。
答案 0 :(得分:0)
您只需要在ajax()完整函数中添加jquery语句,将结果数据填充到HTML元素中:
$('#noti_Counter').html(data.unseen_notification).css({ opacity: 0 }).animate({ opacity: 1 }, 500);
这会在设置动画之前将#noti_counter的内部HTML设置为data.unseen_notification的值。
编辑:我刚注意到&#34;数据:{ticketno:ticketno}&#34;在您的ajax()调用中,您可能需要向第一个引用添加引号,以确保将其视为文本文本而不是变量值。
我还注意到你没有关闭HTML中的tr标签,这对于下面描述的解决方案来说是一个问题。
你最大的问题是你正在调用ajax函数。这有点奇怪,因为您已经使用php创建页面内容,您可以跳过ajax并在页面正文中包含check.php中的代码。因为你有多个#ticket实例,你需要使用jquery遍历集合并为每个实例调用ajax处理程序。
您需要执行以下操作:
$(document).ready(function(){
JQuery.fn.load_unseen_notification = function()
{
$.ajax({
url:"check.php",
method:"GET",
data:{'ticketno':$this.text()},
dataType:'json',
success:function(xhr)
{
var data = JSON.parse(xhr.responseText);
if(data.unseen_notification > 0)
{
$(this).parents("tr").find('#noti_Counter').html(data.unseen_notification).css({ opacity: 0 }).animate({ opacity: 1 }, 500);
}
}
});
}
$("#ticket").each(function(){
$(this).load_unseen_notification();
});
});
这非常麻烦,它将遍历#ticket对象以获取为每个实例发送的值,并且半滥用jquery以找到要填充的正确#noti_counter对象。最好在页面主体或ajax调用中将所有PHP调用在一起,然后使用结果生成HTML。