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());

JQUERY

(function() {

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

})(jQuery);

問題は、関数が更新時に新しい値を返すにもかかわらず、この値がページで1回だけ更新されることです。

4

1 に答える 1

2

コメントで述べたように、要素をsetTimeoutに渡さないため、要素への参照が失われ、事実上何も表示されません。

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