jquery - 如何在 Flask 应用程序的同一页面上发布输出结果?

标签 jquery python html flask

我有一个 flask 应用程序,它将一些文本作为输入,运行 python 脚本并在同一个 html 页面上吐出一个输出,除了它会转到一个新页面。我不明白为什么它会转到新页面。

这是我的 app.py 文件:

#!/usr/bin/env python3

from flask import *
from flask import render_template
from myclass import myfunction

app = Flask(__name__)

@app.route('/')
def homepage():
    return render_template('index.html')

@app.route('/', methods= ["POST"])
def background_process():
    if request.method == 'POST':
        try:
            story = request.form.get('story')
            if story:
                result = myfunction(story)
                return render_template('index.html', **jsonify(result))
            else:
                return jsonify(result='Input needed')
        except Exception as e:
            return (str(e))

if __name__ == "__main__":
    app.debug=True
    app.run()

这是我的 index.html 文件:

 <!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="../static/main.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script type=text/javascript>
            $(function() {
              $('a#process_input').bind('click', function() {
                $.getJSON('/background_process', {
                  story: $('textarea[name="story"]').val(),
                }, function(data) {
                  $('#result').text(data.result);
                });
                return false;
              });
            });
        </script>
    </head>

    <body>
        <div class='container'>
            <form>
                <textarea id="text_input" rows="20" cols="80" name=story></textarea>
                <br>
                <a href=# id=process_input><button class='btn btn-default'>Submit</button></a>
            </form>
            <br>
            <p><h2 align='center'>Result:</h2><h2 id=result align='center'></h2></p>

        </div>
    </body>
</html>

当给出输入时,它以 json 格式在新页面中显示结果。我想在同一页面上显示它。这里出了什么问题? 谢谢!

最佳答案

由于您已经在使用能够处理响应的 ajax 方法,因此您可以直接返回 JSON 响应而不是呈现新模板:

return jsonify(result=result) 

您可能还想将 JQuery 方法的 GET 更改为 POST:

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="../static/main.css">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script type=text/javascript>
            $(function() {
              $('a#process_input').bind('click', function() {
                $.post('/', {  
                  story: $('textarea[name="story"]').val(),
                }, function(data) {
                  $('#result').text(data.result);
                });
                return false;
              });
            });
        </script>
    </head>

(请注意,如果您保留两个独立的函数,而不是我在下面建议的函数,则需要编写 $.post('/background_process'。)

然后您可以将代码收集到一个函数中,模板将使用 GET 方法呈现,响应将从 POST 呈现:

app = Flask(__name__)

@app.route('/', methods= ["GET", "POST"])
def homepage():
    if request.method == 'POST':
        story = request.form.get('story')
        if story:
            result = myfunction(story)
            return jsonify(result=result)
        else:
            return jsonify(result='Input needed')

    return render_template('index.html')

if __name__ == "__main__":
    app.debug=True
    app.run()

关于jquery - 如何在 Flask 应用程序的同一页面上发布输出结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46698134/

相关文章:

javascript - 使用jquery,如何清除 Canvas 中的项目?

javascript - 使用 jquery 时在表上方插入行

javascript - 如何在 IE 兼容模式下居中 jquery 对话框?

python - Django 循环模板中行的总和

javascript - 单击链接打开页面后显示页面中隐藏的div

python - 从 tflite 模型文件中提取标签

Python 理解线程和竞争条件

html - 如何从sql文本字段中获取带有html标签的 "grep"行?

html - IE 9 中的 iframe 内容中断

javascript - 显示占位符图像,直到实际图像加载到 ng-repeat angularjs 中