#javascript #python #flask
Вопрос:
Вот мой Html-код:
<html>
<head>
<title>aerator</title>
</head>
<body>
<div id="train"></div>
<div id="predict"></div>
Вот мой Javascript. Я пытаюсь получить данные с помощью XMLHttpRequest для каждого определенного набора интервалов для 2 переменных, чтобы позже использовать каждую из них для обновления html с помощью идентификатора div и прогнозирования
$(document).ready(function(){
refresh();
});
function refresh()
{
setTimeoutfunction(){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 amp;amp; 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 amp;amp; 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()))
Я ожидаю , что мой запрос XHTTML получит возвращаемое значение от /predict
and /train
, но из того, что я вижу в своем терминале, кажется, что он только отправляет запрос и не получает никакого ответа. Есть ли что-нибудь, что я сделал не так? Спасибо
Комментарии:
1. Что происходит/не происходит, что заставляет вас говорить, что это не работает? Ты не описал симптом, я бы ожидать исходя из основных проблем, которую я вижу навскидку: вы используете
setInterval
(который планирует повторяющийся таймер), и затем вызовrefresh
, который начинается другой повторяющийся таймер, снова и снова, так что в относительно короткие сроки вы будете иметь тысячи интервальных таймеров все пытаетесь запустить. Для одноразового таймера используйтеsetTimeout
. (И я бы посоветовал вам не запускать следующий таймер до тех пор, пока не будет завершен ajax-запрос, запущенный предыдущим.)2. Привет @Ти Джей Краудер, спасибо за ответ. Я ожидаю , что мой запрос XHTTML получит возвращаемое значение от
/predict
and/train
, но из того, что я вижу в своем терминале, кажется, что он только отправляет запрос и не получает никакого ответа. Я совсем новичок в веб-программировании и колбе, поэтому, возможно, я ошибаюсь, но из того, что я знаю, в каждом сообщении должен быть правильный ответ, но я не вижу в своем терминале только сообщение.3. Я не могу помочь со стороной Python/Flask. Вы можете проверить вкладку Сеть в devtools браузера. Но
setInterval
проблема, описанная выше, нуждается в устранении. 🙂 Кроме этого, вашXMLHttpRequest
код выглядит нормально, хотя я бы всегда рекомендовал использоватьfetch
его вместо этого (просто остерегайтесь пистолета, о котором я пишу здесь ). Но опять же, этот код XHR в порядке.
Ответ №1:
Разве xhttp.open не является методом «POST» для отправки данных? Если вы хотите получить данные, используйте метод «ПОЛУЧИТЬ»?
Ответ №2:
Для тех, кто, возможно, захочет узнать, в чем проблема, мне на самом деле удается выяснить причину, по которой сообщение не дало никакого ответа. Это связано с тем, что в flask вам нужно указать методы доступа к функции, иначе ваш запрос на публикацию или получение будет проигнорирован.
@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()))
Спасибо за помощь сообщества, и я надеюсь, что мой ответ поможет тем, кто в нем нуждался.