gpt4 book ai didi

javascript - 在 Flask 中动态更新变量

转载 作者:太空宇宙 更新时间:2023-11-03 15:04:30 25 4
gpt4 key购买 nike

我正在使用flask,需要让一个python变量出现在HTML页面上并实时更新它,而不需要刷新。我已经搜索过但无法做到。为了以简单的方式找到解决方案,我在 python 脚本中创建了一个应该在页面中动态更新的时间变量。这是我的代码:

<script>
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
(function(){
$.getJSON(
$SCRIPT_ROOT+"/get_data",
function(data) {
$("#testt").text(data.time);
}
setInterval(arguments.callee, 1000);
);
});
</script>
<span id="testt">?</span>

import datetime
from flask.app import Flask
from flask.json import jsonify

app=Flask(__name__)

@app.route('/get_data', methods=['GET'])
def get_data():
return jsonify(time=str(datetime.datetime.now().time()))
if __name__=="__main__":
app.run(debug = True, host='0.0.0.0')

编辑:在我的解决方案中,时间仅在刷新页面时更新。希望它实时更新。

最佳答案

您没有具体说明您的问题是什么(“不起作用”并没有真正帮助),因此这充其量只能是一个粗略的猜测答案。

第一点,您定义了一个匿名函数但从未调用它,因此它被执行的机会严格等于零。如果您希望在 dom 准备就绪时执行该函数(这是明智的做法,因为它引用了在该函数之后定义的 dom 元素,您可以使用 $(document).ready(yourfunc) ,即:

$(document).ready(function(){
$.getJSON(
$SCRIPT_ROOT+"/get_data",
function(data) {
$("#testt").text(data.time);
}
setInterval(arguments.callee, 1000);
);
});

而且你当然不想打电话window.setInterval()来自函数本身(然后每次调用函数时都会再次调用),所以它应该是这样的:

$(document).ready(function(){
function _update_time() {
$.getJSON(
$SCRIPT_ROOT+"/get_data",
function(data) {
$("#testt").text(data.time);
});
}
// do a first call at load time
_update_time();
// then repeat it every second
window.setInterval(_update_time, 1000);
);
});

另外,我不是 Jinja2 专家(因为它是 Flask,从它的外观来看,我认为它是 Jinja2 模板),但是这个:

$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};

对我来说似乎不正确。

首先,你想要$SCRIPT_ROOT是一个字符串,所以你必须引用它:

$SCRIPT_ROOT = "{{ request.script_root|tojson|safe }}";

那么我不明白 tojson 的意义和safe在这里过滤 - safe告诉模板引擎不要对变量进行 html 转义,但 url 很少包含 html 标记,并且 json 化一个简单的字符串对我来说没有意义。

这充其量只是猜测,而且可能完全错误。如果您想要更好的答案,您必须做好功课并发布更多信息,包括:

  • 渲染的 html(以及相关部分)
  • 浏览器检查器窗口/调试工具栏中的任何错误消息/无论在浏览器中如何调用它。

关于javascript - 在 Flask 中动态更新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44778553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com