【问题标题】:Why is XMLHttpRequest() seems to be unable to update?为什么 XMLHttpRequest() 似乎无法更新?
【发布时间】:2021-06-11 04:18:59
【问题描述】:

这是我的 HTML 代码:

<html>
<head>
<title>aerator</title>
</head>

<body>

<div id="train"></div>
<div id="predict"></div>

这是我的 Javascript。我正在尝试使用 XMLHttpRequest 为 2 个变量的每个特定间隔获取数据,以便稍后使用它们中的每一个更新带有 div id train 的 html 并预测

$(document).ready(function(){
refresh();
});


function refresh()
{                                                                       
    setTimeoutfunction(){
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("predict").innerHTML = this.responseText;
                }
        };
        
        xhttp.open("POST", "http://127.0.0.1:5000/predict", true);
        xhttp.send();
    }, 1100);
    
    setTimeout{function(){
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("train").innerHTML = this.responseText;
                }
        };
        
        xhttp.open("POST", "http://127.0.0.1:5000/train", true);
        xhttp.send();
    }, 3000);
}

下面是我的 python 烧瓶代码。我包括了我在上面的 javascript 代码中引用的所需功能。 编辑:我实际上已经尝试过 POST 和 GET 方法,但都没有检索数据。

@app.route("/predict")
def mainPrediksi():
    predict = preprocessing('root','','127.0.0.1','database')

    if(condition):
        X = 'option1'
    else:
        X = 'option2'
    return (X,str(datetime.now()))

@app.route("/train")
def mainTrain():
    X_train,X_test,Y_train,Y_test = preprocessing('root','','127.0.0.1','database')

    X_train = X_train.astype(float)
    Y_train = Y_train.astype(float)

    #train classifier
    model = train_clf(X_train,Y_train)
    
    # save the model to disk
    filename = 'randomForest.sav'
    joblib.dump(model, filename)
 
    return ('Success Train Model',str(datetime.now()))

我希望我的 XhttmlRequest 从 /predict/train 获取返回值,但从我在终端中看到的情况来看,它似乎只发布请求而没有得到任何响应。 t 我做错了什么吗?谢谢

【问题讨论】:

  • 发生了什么/没有发生什么让您说它不起作用?您没有根据我看到的主要问题描述我期望的症状:您正在使用setInterval(它安排一个recurring计时器)然后再次调用refresh,它会一遍又一遍地启动 另一个 循环计时器,因此在相对较短的时间内,您将有数千个间隔计时器都在尝试运行。对于一次性计时器,请使用setTimeout。 (而且我建议您在前一个启动的 ajax 请求完成之前不要启动下一个计时器。)
  • 嗨@T.J.Crowder 感谢您的回复。我期待我的 XhttmlRequest 从 /predict/train 获取返回值,但从我在终端中看到的内容来看,它似乎只发布请求而没有得到任何响应。我对网络编程和烧瓶很陌生,所以我可能错了,但据我所知,每篇文章都应该有正确的回应,但我在终端中没有看到任何回应。
  • 我对 Python/Flask 方面的事情无能为力。您可以检查浏览器开发工具中的网络选项卡。但是上面的setInterval 问题需要修复。 :-) 除此之外,您的XMLHttpRequest 代码看起来不错,尽管我总是建议使用fetch 代替(请注意我写的关于here 的footgun)。但同样,那个 XHR 代码很好。

标签: javascript python flask


【解决方案1】:

发送数据的不是xhttp.open“POST”方法吗?如果要检索数据,使用“GET”方法?

【讨论】:

    【解决方案2】:

    对于任何可能想知道问题出在哪里的人,我实际上设法找出帖子没有给出任何回应的原因。这是因为在烧瓶中您需要指定访问函数的方法,否则您的 POST 或 GET 请求将被忽略。

    @app.route("/predict",methods=["POST","GET"])--> added methods in here
    def mainPrediksi():
        predict = preprocessing('root','','127.0.0.1','database')
    
        if(condition):
            X = 'option1'
        else:
            X = 'option2'
        return (X,str(datetime.now()))
    

    感谢社区的帮助,希望我的回答能帮助到需要的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多