Я делаю приложение колбу.Пользователь отправляет форму, которая отправляется на сервер.Сервер что-то делает, и я пытаюсь добавить результаты в неупорядоченный список по мере их поступления.
Я пытаюсь получить результаты в фляге и использую XMLHttpRequest в своем файле JavaScript, чтобы добавить каждый элемент кнеупорядоченный список.
main.py:
@app.route('/')
def index():
return render_template("index.html")
@app.route('/search', methods=['GET', 'POST'])
def search_form():
print(request.form)
x = request.form['id']
a = Vbulletin(x)
def result_gen():
return a.reg_ver()
result_gen()
def generate_resp():
for text in result_gen():
print(text)
yield jsonify(text)
sleep(1)
return app.response_class(generate_resp(), mimetype='application/json')
app.run()
forumsearch.js:
$(document).ready(function(){
$("#submit").on('click',function(e){
e.preventDefault();
req = $.ajax({type: "POST",
url: "/search",
data: { id: $("#searchinput").val()},
});
req.done(function(temp){
alert("POST was sent.");
var latest = document.getElementById('latest');
var output = document.getElementById('output');
var xhr = new XMLHttpRequest();
xhr.open('GET', '/search');
xhr.send();
var position = 0;
function handleNewData() {
var messages = xhr.responseText.split('\n');
messages.slice(position, -1).forEach(function(value) {
latest.textContent = value;
var item = document.createElement('li');
item.textContent = value;
output.appendChild(item);
});
position = messages.length - 1;
}
var timer;
timer = setInterval(function() {
handleNewData();
if (xhr.readyState == XMLHttpRequest.DONE) {
clearInterval(timer);
latest.textContent = 'Done';
}
}, 1000);
});
});
});
У меня проблемы с получением ответа, отправленного клиенту, иполучаю эту ошибку:
RuntimeError: Работа вне контекста приложения.
Я изменил generate_resp () на следующее:
def generate_resp():
with app.app_context():
for text in result_gen():
print(text)
yield jsonify(text)
sleep(1)
Теперь яполучить эту ошибку:
AssertionError: приложения должны записывать байты
На данный момент я не уверен, что добавление 'app_context' решило мою основную проблему, и теперь у меня естьпроблема с форматированием, или если я вообще ничего не исправил.Как я могу это исправить, чтобы ответ отправлялся клиенту асинхронно?