烧瓶

时间:2017-06-27 10:56:39

标签: javascript jquery python ajax flask

我正在使用flask并且需要在HTML页面上显示一个python变量&无需刷新即可实时更新。我已经搜索过但无法进行搜索。为了找到一个解决方案,我在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>
&#13;
&#13;
&#13;

&#13;
&#13;
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')      
&#13;
&#13;
&#13;

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

2 个答案:

答案 0 :(得分:0)

您可以使用websocket以dinamically方式更新您的页面。 有一个名为Socket.Io的项目,由Flask实现,用于处理websockets。

您可以在此处阅读文档:https://flask-socketio.readthedocs.io/en/latest/并观看一个快速示例,了解此处的概念:https://www.youtube.com/watch?v=RdSrkkrj3l4

答案 1 :(得分:0)

你没有准确指出你的问题是什么(&#34;没有工作&#34;没有真正的帮助)所以这可能是一个疯狂猜测的答案最好的。

首先,你定义了一个匿名函数,但从不调用它,所以它被执行的几率严格等于零。如果你希望在你的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()(每次调用函数时会再次调用它),所以它应该是这样的: / p>

$(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 }}";

然后我在这里看不到tojsonsafe过滤器的意思 - safe告诉模板引擎不要html转义你的变量但是一个url很少包含html标记,jsonifying一个简单的字符串对我来说没有意义。

再一次,它充满了猜测并且可能完全错误。如果你想要更好的答案,你将不得不做你的功课并发布一些更多的信息,包括:

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