Javascript 使用Flask和AJAX进行轮询:为什么服务器响应没有显示在html中?
我正在用Flask制作一个web应用程序。用户提交一个表单并将其传递给服务器。该值被传递给我编写的python脚本,该脚本检查用户名是否出现在许多web论坛上 当结果出现时,它们将通过AJAX传递回页面。我想在收到数据时更新网页。我知道WebSocket可能更有效,但这只是为了练习,我想学习如何使用轮询 main.py:Javascript 使用Flask和AJAX进行轮询:为什么服务器响应没有显示在html中?,javascript,python,jquery,html,flask,Javascript,Python,Jquery,Html,Flask,我正在用Flask制作一个web应用程序。用户提交一个表单并将其传递给服务器。该值被传递给我编写的python脚本,该脚本检查用户名是否出现在许多web论坛上 当结果出现时,它们将通过AJAX传递回页面。我想在收到数据时更新网页。我知道WebSocket可能更有效,但这只是为了练习,我想学习如何使用轮询 main.py: @app.route('/search', methods=['GET', 'POST']) def search_form(): #print(request.for
@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():
with app.app_context():
for text in result_gen():
print(text)
text2 = json.dumps(text)
#print(text2)
yield (text2)
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){
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);
});
});
});
我遇到的问题是,当我查看“网络”选项卡中的响应时,浏览器中的POST请求会显示结果,但网页上没有更新结果。我认为有几件事可能是问题所在,但我不确定如何继续
第一个是永远不会发送XHR“GET”请求。发送“POST”请求并将响应发送到客户端,但之后的“GET”请求从未发送
也许我不理解轮询,但我不需要发出GET请求来轮询服务器吗?还是只需要处理POST请求
我看到的另一个问题是,我从“POST”请求得到的响应有语法错误
答复如下:
"https://www.bimmerboost.com/register.php , user found!!! I SAID USER FOUND!!!""http://www.vbforums.com/register.php , user found!!! I SAID USER FOUND!!!"
firefox中的错误是:
SyntaxError:JSON.parse:后面出现意外的非空白字符
JSON数据第1行第80列的JSON数据
如何修复此错误,以及需要更改什么才能使服务器响应显示在html中?为什么在发送文本时将mime类型设置为json?更改$(“#提交”)。在('click',函数(e){到$(“#提交”)。提交(函数(e){e.prevent默认值需要一个进程来阻止,而不是阻止您在代码中使用的单击操作。此外,我认为当您指定type=submit属性时,它会将click()操作更改为submit()操作类型当进行您建议的更改时,它会将我的“POST”请求发送到index.html而不是“/search”,我如何解决此问题?我将mime类型更改为text/plain。它现在发送“GET”请求(谢谢),但我收到400个错误,我需要解析JSON吗?