【问题标题】:Python Flask Refresh table every 60 secondsPython Flask 每 60 秒刷新一次表
【发布时间】:2017-08-16 18:42:45
【问题描述】:

我在下面发布了我的烧瓶代码。我想每 60 秒刷新一次表 dataSetinterval 函数包含在 html 中。但它并不令人耳目一新。我没有弄清楚 ajax/Javascript 中的确切问题。请有人可以帮助解决这个问题。

App.py:

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)

dashboard.html:

<!doctype html>
<html>
 <body>
<script>
 setInterval(function() {
 $.ajax({
  type: "POST",
  url: "/",
 })
  .done(function( data ) {
    $("#table-box").val(data)
   });
  }, 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>

控制台输出:

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

【问题讨论】:

  • stackoverflow的重点不是为你提供代码。有几种方法可以实现这一点,最简单的方法是使用简单的&lt;META&gt; 标签来重新加载整个页面。我相信你可以使用谷歌找到它。其他方法包括仅刷新表数据的 AJAX 调用。
  • 寻求调试帮助的问题必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:游览,并阅读如何提问。我可以询问哪些主题
  • @Roy Prins:感谢您的建议。我已经改写了问题。现在我认为有人可以找出 html 中的错误。
  • @serdar.sanri :如果您不理解问题,请不要发表评论。每个人都不是像你这样的专家。希望你能理解。请鼓励新手提出问题。谢谢。

标签: javascript python ajax flask dom-events


【解决方案1】:

您的代码有几个问题:

  1. 您在应该使用.html()的地方使用.val()

    .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>

编辑:您似乎没有路由/控制器将 AJAX 请求的句柄设置为POST/。你应该尝试这样的事情:

@app.route('/json', methods= ['GET'])     
def display_deals_json():
  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 json.dumps(data)

您需要将 AJAX 命令更新为:

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

【讨论】:

  • 我试过这个建议,但问题仍然没有解决。它仍然是静态页面。我正在使用谷歌浏览器。下面是烧瓶调试器的输出。 * 使用 stat 重启 * 调试器处于活动状态! * 调试器 PIN:900-414-213 * 在127.0.0.1:5000 上运行(按 CTRL+C 退出)127.0.0.1 - - [17/Aug/2017 12:41:37] "GET / HTTP/1.1" 200 - 127.0 .0.1 - - [17/Aug/2017 12:41:38] “GET /favicon.ico HTTP/1.1”404 - 127.0.0.1 - - [17/Aug/2017 12:46:06] “GET / HTTP/ 1.1" 200 -
  • 不是烧瓶不工作。显示浏览器控制台输出。
  • 这里是浏览器控制台输出 - Uncaught ReferenceError: $ is not defined at localhost/:6 。 $.ajax({) 处的错误
  • 我已经用一个应该可以工作的示例路由/控制器更新了我的答案。您还需要更新 AJAX 请求调用的 URL。
  • 您可能需要在 Ajax 请求中将 type 设置为 json。除此之外,检查什么数据回来了,祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2019-08-25
  • 1970-01-01
  • 2012-01-09
  • 2014-06-01
  • 2016-01-23
  • 2022-07-06
相关资源
最近更新 更多