我想在使用web2py构建的网站上创建一个实时运行时钟。
我的控制器中有一个get_current_time函数,它返回当前时间并在我的页面上显示。但是,该功能仅在加载页面时调用一次,因此它仅显示页面加载的时间。我希望每分钟都能调用此函数,以便当前时间始终显示在页面上。
控制器(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网址: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函数来获取时间。
答案 0 :(得分:0)
您必须使用Ajax请求,但您的Ajax代码不正确。最简单的方法是使用web2py ajax()
函数:
<script>
setInterval(function() {
ajax('{{=URL('default', 'get_current_time')}}', [], 'current_time');
}, 1000);
</script>
当然,这是在浏览器中显示时钟的一种非常低效的方式。