Опрос с помощью Flask и AJAX: почему ответ сервера не отображается в html? - PullRequest
2 голосов
/ 28 сентября 2019

Я делаю веб-приложение с 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...