将PHP获取数组数据推送到ajax请求并返回

时间:2017-03-01 06:45:59

标签: javascript php jquery ajax

我有一个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的新手。

1 个答案:

答案 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。