PythonFlask刷新表每60秒

2024-10-01 17:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我把我的瓶子代码贴在下面。我希望每隔60秒刷新表数据。Setinterval函数包含在html中。但这并不令人耳目一新。我没有弄清楚ajax/javascript的确切问题。拜托,有人能帮忙解决这个问题。在

应用程序副本:

app = Flask(__name__)
app.config['SECRET_KEY'] = 'dsfd'
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'pwd'
app.config['MYSQL_DATABASE_DB'] = 'db'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
eachcur = ["A","B","C","D"]

@app.route('/', methods= ['GET'])     
def display_deals():


    conn = mysql.connect()
    c = conn.cursor()
    data = ((),)
    for curren in eachcur:
      query = "SELECT * from "+curren+" ORDER BY Currid DESC LIMIT 1"
      c.execute(query)
      data = data + c.fetchall()

    conn.close()


    return render_template("dashboard.html", data=data)

if __name__ == '__main__':
    app.run(debug=True)

仪表板.html:

^{pr2}$

控制台输出:

jquery.min.js:4 XHR finished loading: POST "http://localhost:5000/".
send @ jquery.min.js:4
ajax @ jquery.min.js:4
(anonymous) @ (index):7
setInterval (async)
(anonymous) @ (index):6
17:21:45.516 jquery.min.js:4 [Violation] 'load' handler took 334ms

Console snapshot

Console snapshot - 2 谢谢你


Tags: nameconfigapplocalhostdatahtmlmysqljs
1条回答
网友
1楼 · 发布于 2024-10-01 17:35:30

您的代码有几处错误:

  1. 您正在使用.val(),而您应该使用.html()

    .val()用于设置输入字段之类的值,而不是覆盖整个DOM对象。您应该在这里使用.html()

  2. 您正在将非html数据分配给#table-box

    生成表的for语句只能在页面加载时运行。您需要在AJAX.done()处理程序中重新生成所有表行。

请参阅下面我的示例,它修复了这两个问题。在

<!doctype html>
<html>
 <body>
<script>
 setInterval(function() {
 $.ajax({
  type: "POST",
  url: "/",
 })
  .done(function( data ) {
    console.log(data);
    var tableHtml = '';
    for (row in data) {
      tableHtml += '<tr>';
      for (d in row) {
        tableHtml += '<td>' + d + '</td>';
      }
      tableHtml += '</tr>';
    }
    $("#table-box").html(tableHtml)
   }).fail(function(jqXHR, textStatus, errorThrown) {
     console.log(jqXHR, textStatus, errorThrown);
   });
  }, 1000 * 60); 
  </script>
<table border="2" cellpadding="4" cellspacing="5" id="table-box" >
{% for row in data %}
    <tr>
    {% for d in row %}
        <td>{{ d }}</td>
    {% endfor %}
    </tr>
{% endfor %}
</table>
 </body>
</html>

EDIT:看起来并没有路由/控制器设置AJAX请求的句柄POST/。你应该试试这样的方法:

^{pr2}$

您需要将AJAX命令更新为:

$.ajax({
  type: "GET",
  url: "/json",
})

相关问题 更多 >

    热门问题