当数据库中有新数据时,使用jquery进行Div刷新不会显示新内容

时间:2012-06-07 15:12:26

标签: php mysql ajax jquery

我创建了一个带有div的php文件,每10秒刷新一次。在此div中,将加载查询的结果。演示:http://mauricederegt.nl/test/test.php

看起来它正在刷新div,但如果在数据库中添加了新数据,则div不会获取新数据并继续显示旧数据。

我使用与需要重新加载的页面相同的页面:

$('#scoreboard-overview').fadeOut('slow').load('index.php #scoreboard-overview').fadeIn("slow");

如果我将div中使用的sql查询复制到外部php文件(例如reload.php),然后将其称为:

$('#scoreboard-overview').fadeOut('slow').load('reload.php').fadeIn("slow");

它有效,div显示最新数据。问题是:我不想使用另一个外部php文件。

我该如何做到这一点?

我还尝试将$resulttt查询放在div中,但这也没有效果。我错过了什么?

亲切的问候,

index.php中使用的代码:

<?php
    /////////////////////////////////////////////

    //mysql_connect(servername,username,password);
    //Here we connect to the database

    /////////////////////////////////////////////
//Get the data
$resulttt = mysql_query("SELECT fbID, highscore, stars, MIN(time) AS time FROM highscore GROUP BY fbID, highscore ORDER BY highscore DESC, time ASC LIMIT 7");



?>
<!DOCTYPE html>
<html xmlns:fb="http://www.facebook.com/2008/fbml">

<head>
<meta charset="utf-8">
<title>Test</title>
<link rel="stylesheet" href="test.css" />
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js"></script>
<script>
var auto_refresh = setInterval(
function()
{
$('#scoreboard-overview').fadeOut('slow').load('index.php #scoreboard-overview').fadeIn("slow");
}, 10000);
</script>
</head>
  <body>
    <div id="scoreboard">
        <div id="scoreboard-title">High scores</div>
        <div id="scoreboard-overview">
        <?php   echo '<ul>';
                $num_rows = mysql_num_rows($resulttt);
                $i = 0;
                    while($row = mysql_fetch_array($resulttt)) {
                        $i = $i + 1;
                        $fb_data = json_decode(file_get_contents('http://graph.facebook.com/'. $row['fbID']));
                        $fb_locale_str = $fb_data->locale;
                        $fb_name_str = $fb_data->first_name;
                        $fb_country_str = strtolower(substr($fb_locale_str, -2));
                        $flag_uri = 'images/flags/unknown.gif'; //display a general flag if unknown.
                        $row['fbnr'] = $row['fbID'];

                        echo '<li id="'. $row['fbnr'] .'">
                                <div class="userpicture"><img src="https://graph.facebook.com/'. $row['fbID'] .'/picture" alt="" /></div>
                                <div class="username"><p>'.$i.'. '.$fb_name_str.'</p></div>
                                <div class="userflag"><img src="'.$flag_uri.'" alt="" /></div>  
                                <div class="userholder">
                                    <div class="usertime"><p><img src="images/time.png" alt="" /><br>'. $row['time'] .'</p></div>
                                    <div class="userstars"><img src="images/'. $row['stars'] .'s.png" alt="" /></div>
                                    <div class="userscore"><p>'. $row['highscore'] .'</p></div>
                                </div>      
                            </li>';
                    }
            echo '</ul>'; ?>

        </div>
        <div id="scoreboard-bottom">end</div>
    </div>
  </body>
</html>

我认为我找到了使用GET的解决方法,感谢所有人的帮助

1 个答案:

答案 0 :(得分:2)

我无法想象任何浏览器都会对Javascript尝试将整个HTML页面(包含<html><head><body>标记)插入到元素中感到高兴现有文件。您希望将已加载页面上的scoreboard-overview内容放入现有页面上的scoreboard-overview,因此请在调用.load()时添加一个选择器:

$('#scoreboard-overview').fadeOut('slow').load('index.php #scoreboard-overview').fadeIn("slow");