如何使用 web2py 创建实时 运行 时钟?

How to create a live running clock using web2py?

我想在我使用 web2py 构建的网站上创建一个实时 运行 时钟。

我的控制器中有一个 get_current_time 函数,可以 returns 当前时间并将其显示在我的页面上。但是,该函数只在页面加载时调用一次,因此它只显示页面加载的时间。我希望每分钟调用一次此函数,以便当前时间始终显示在页面上。

控制器(default.py)

from datetime import datetime
def get_current_time():
    return str(datetime.now())

def index():
    return dict(message=get_current_time())

查看(index.html):

{{=message}}

当我转到我的应用程序 web2py 时 url:http://127.0.0.1:8000/myapplication/default/index

我看到以下内容,但加载后时间没有改变或更新:

'2017-08-31 07:28:17.635000

我试过使用 JavaScript 来获得一个实时时钟:

<!DOCTYPE html>
<body>
<p id='current_time'>
    </p>
<script>
document.getElementById("current_time").innerHTML = {{=message}}

setInterval(function() {
document.getElementById("current_time").innerHTML = {{=message}}
},1000)
</script>
  </body>
</html>

我也试过以下方法:

<!DOCTYPE html>
<body>
<p id='current_time'>
    </p>
<script>
function httpGet(theUrl)
{
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            return xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", theUrl, false );
    xmlhttp.send();  
}
document.getElementById("current_time").innerHTML =httpGet("http://127.0.0.1:8000/myapplication/default/get_current_time"); =

setInterval(function() {
document.getElementById("current_time").innerHTML = =httpGet("http://127.0.0.1:8000/myapplication/default/get_current_time");
},1000)
</script>
  </body>
</html>

注意:当我访问http://127.0.0.1:8000/myapplication/default/get_current_time时,我在浏览器中看到的是当前时间

重要的是要注意我的目标是通过在我的控制器中调用我的 get_current_time() 函数来获取当前时间,而不是利用 javascript 来生成时间。换句话说,我想 javascript 调用我的 python 函数来获取时间。

您必须使用 Ajax 请求,但您的 Ajax 代码不正确。最简单的方法是使用 web2py ajax() 函数:

<script>
setInterval(function() {
  ajax('{{=URL('default', 'get_current_time')}}', [], 'current_time');
}, 1000);
</script>

当然,这是在浏览器中显示时钟的一种非常低效的方式。