1

我目前正在使用 ajax 尝试创建一个脚本,该脚本从实时更新的数据库中返回一个值。

HTML

<!doctype html>
<html lang="en-gb">
<head>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <script type="text/javascript" src="ajax.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            liveReload('#ajax');
        });
    </script>
    <meta charset="utf-8">
</head>
<body>
    <section id="ajax">0</section>
</body>
</html>

PHP

<?php

class Ajax
{
    public static function grab()
    {
        try
        {
            $db = new PDO('mysql:host=localhost;dbname=ajax', 'root', null);
            $rq = $db->query('select setting, value from test');
            return $rq->fetchAll(PDO::FETCH_ASSOC)[0];
        }
        catch (PDOException $e)
        {
            echo $e->getMessage();
        }
    }
}

echo json_encode(Ajax::grab());

查询

(function() {

liveReload = function(element) {
    $.ajax({
        url: 'ajax.php',
        dataType: 'json',
        cache: false,
        success: function(data)
        {
            $(element).html(data['value']);
            setTimeout(liveReload, 1000);
        }
    })
}

})(jQuery);

问题是该值仅在页面中更新一次,尽管函数在更新时返回新值。

4

1 回答 1

2

正如我在评论中所说:您不会将元素传递给 setTimeout,因此它会丢失对元素的引用并且实际上什么也不显示

setTimeout(function() {liveReload(element);}, 1000);
于 2013-01-30T22:28:53.367 回答