我正在申请烧瓶。用户提交一个表单,该表单将发送到服务器。服务器执行了某些操作,我尝试将结果添加到无序列表中。
我试图在烧瓶中产生结果,并在我的JavaScript文件中使用XMLHttpRequest将每个项目附加到无序列表中。
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'是否解决了我的主要问题,现在我有格式问题要解决,或者我从不修复任何问题。我该如何解决,以便将响应异步发送到客户端?