【问题标题】:Page stops responding and freezes while sending continuous request to web server from ajax从 ajax 向 Web 服务器发送连续请求时页面停止响应并冻结
【发布时间】:2020-04-30 05:28:34
【问题描述】:

我正在尝试在网页上创建一个信号,并根据从数据库中检索到的值显示绿色或红色。但是当我在 10 秒后发送请求时,页面似乎被冻结并且没有响应。我无法找出哪里出错了,请帮我解决这个问题。

Techstack 使用 - HTML、CSS、Js、Ajax、Python(Flask) 和 PostgreSQL

function latest_status(){

    var header = document.getElementById("circle");

    var tbid = $('#mtb').val();

    var signal = $.ajax({
        type: 'POST',
        url: '/status?tbid='+tbid,
        data: "",
        contentType: false,
        dataType: "json",
        async:false,
        cache: false,
        processData: false,
        success: function(data) {
        },
        //error: function(data) {
        //  alert("Data Not received !!");
        //},
        complete: function(data){
            setTimeout(latest_status, 10000);
        }
    });

    var signaldata = JSON.parse(signal.responseText);

    var signalvalue = signaldata[0].signalvalue;
    var datevalue = signaldata[0].date;

    if(signalvalue == '1')
    {
        header.style.background = "green";
    }
    else
    {
        header.style.background = "red";
    }
};

setTimeout(latest_status, 10000);

烧瓶代码:

from flask import Flask, redirect, url_for, request, render_template
from flask_socketio import SocketIO
from werkzeug.utils import secure_filename
from flask import jsonify
import json
import eventlet

from collections import OrderedDict

import psycopg2

app = Flask(__name__)
app.config['SECRET_KEY'] = 'project!'
socketio = SocketIO(app)

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

    tbid = request.args['tbid']

    if request.method == 'POST':

        connection = psycopg2.connect(user = "postgres", password = "abcd",host = "localhost",port = "5432", database="mydb")
        cursor = connection.cursor()

        sql1 = "Select * from hst_vw where tb_id = %s"

        record_to_update = (tbid,)

        cursor.execute(sql1,record_to_update)
        record = cursor.fetchall()
        connection.commit()

        status_arr = []

        for i in record:
            hs = OrderedDict()
            hs["signalvalue"] = i[0]
            hs["date"] = i[1]
            hs["tbid"] = i[2]

            status_arr.append(hs)


        json_date = json.dumps(status_arr, default = str)

        return json_date

if __name__ == '__main__':
    socketio.run(app)

【问题讨论】:

  • 你能告诉我们你的FLASK代码吗?
  • @Tobin 我已经添加了烧瓶代码,请看一下。请帮助我解决这个冻结我的屏幕并需要很长时间才能响应的问题

标签: javascript python jquery ajax flask


【解决方案1】:

如果您将setTimeout(latest_status, 10000); 放在成功块中,那么它将在请求完成后运行,因此您的代码将如下所示。

var signal = $.ajax({
    type: 'POST',
    url: '/status?tbid='+tbid,
    data: "",
    contentType: false,
    dataType: "json",
    async:false,
    cache: false,
    processData: false,
    success: function(data) {
        setTimeout(latest_status, 10000);
    },
});

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多