Почему ответ колбы не отправляется клиенту асинхронно? - PullRequest
0 голосов
/ 25 сентября 2019

Я делаю приложение колбу.Пользователь отправляет форму, которая отправляется на сервер.Сервер что-то делает, и я пытаюсь добавить результаты в неупорядоченный список по мере их поступления.

Я пытаюсь получить результаты в фляге и использую 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' решило мою основную проблему, и теперь у меня естьпроблема с форматированием, или если я вообще ничего не исправил.Как я могу это исправить, чтобы ответ отправлялся клиенту асинхронно?

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