如何从AJAX获取数据并相应地显示/隐藏div

时间:2014-08-17 20:03:26

标签: javascript php jquery ajax get

我正在编写一个PHP脚本,它回显一个表示未读消息数量的数字。

我有以下代码,每隔30秒处理一次PHP。

setInterval(function (){
            $.ajax({
                url: "php/notifications_counter.php",
                cache: false,
                success: function(number){
                $("#notification_counter").show();
                $("#notification_counter_number").text(number);
      }
    });
        },5010);

应将PHP回声插入div中的数字称为“#notification_counter_number”。确实插入了数字。但是由于一些奇怪的原因,加上数字也会在php文件里面的评论得到回应?我无法让它正常工作。

此外,我希望#notification_counter显示何时有回显的数字,但是当没有数字时隐藏。所以我尝试了以下代码:

...success: function(number){
                if (number > 0) {
                  $("#notification_counter").show();
                  $("#notification_counter_number").text(number);}
                else {$("#notification_counter").show();}
  }

这也不起作用:( div总是被隐藏,即使PHP输出的数字超过0.希望你们可以提供帮助。

更新:这是我的php文件:

<!--
blabla commenting, so this gets visible as text in DIV as well. Strange...

!-->

    <?php

    include "config.php";

    //Count unread messages from database
    $Number_Query = mysqli_query ($mysqli, "SELECT * FROM notifications WHERE Notification_Read='0' "); 

    $Notification_Count = mysqli_num_rows($Number_Query);

    if ($Notification_Count > 0) {
    echo "$Notification_Count"; }

    //Close connection
    mysqli_close($mysqli);

    ?>

2 个答案:

答案 0 :(得分:1)

因此,当您通过ajax获取页面时,它将返回整个正文,而不仅仅是您在浏览器中看到的内容。所以在字符串中返回<!-- html注释。您需要使用php注释完全删除该输出,否则您的number > 0计算将失败。

如果您无论出于何种原因绝对无法更改PHP输出,您可以通过执行以下操作来删除所有字符的响应:

if (number.replace(/\D/g,'') > 0) {

但这非常糟糕。最好清理你的php文件。

答案 1 :(得分:0)

<!-- -->是一个HTML注释,输出到浏览器,只需更改为php注释:

<?php
/*
blabla commenting, so this gets visible as text in DIV as well. Strange...

*/

include "config.php";

在进行更改时,输出JSON也是有意义的,这样可以在需要时添加额外数据(例如评论时间,作者等):

$Notification_Count = mysqli_num_rows($Number_Query);
header('Content-Type: application/json');
echo json_encode(array('count'=>$Notification_Count));


//javascript
success: function(data){
   if (data.count > 0)...