Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Flask和AJAX进行轮询:为什么服务器响应没有显示在html中?_Javascript_Python_Jquery_Html_Flask - Fatal编程技术网

Javascript 使用Flask和AJAX进行轮询:为什么服务器响应没有显示在html中?

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

我正在用Flask制作一个web应用程序。用户提交一个表单并将其传递给服务器。该值被传递给我编写的python脚本,该脚本检查用户名是否出现在许多web论坛上

当结果出现时,它们将通过AJAX传递回页面。我想在收到数据时更新网页。我知道WebSocket可能更有效,但这只是为了练习,我想学习如何使用轮询

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中?

为什么在发送文本时将mime类型设置为json?更改$(“#提交”)。在('click',函数(e){到$(“#提交”)。提交(函数(e){e.prevent默认值需要一个进程来阻止,而不是阻止您在代码中使用的单击操作。此外,我认为当您指定type=submit属性时,它会将click()操作更改为submit()操作类型当进行您建议的更改时,它会将我的“POST”请求发送到index.html而不是“/search”,我如何解决此问题?我将mime类型更改为text/plain。它现在发送“GET”请求(谢谢),但我收到400个错误,我需要解析JSON吗?