如何使用 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>
当然,这是在浏览器中显示时钟的一种非常低效的方式。
我想在我使用 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>
当然,这是在浏览器中显示时钟的一种非常低效的方式。