Я делаю веб-приложение с Flask.Пользователь отправляет форму, которая передается на сервер.Значение передается написанному мной скрипту Python, который проверяет, используется ли имя пользователя на ряде веб-форумов.
По мере получения результатов они возвращаются на страницу с помощью AJAX.Я хочу обновить веб-страницу по мере поступления данных. Я понимаю, что веб-сокеты, вероятно, более эффективны, но это только для практики, и я хочу научиться делать это с помощью опроса.
main.py:
@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?