javascript - 在 Flask 应用程序中添加 Ajax 后,文本不会随 render_template 变化

标签 javascript python ajax flask flask-wtforms

我创建了一个简单的AJAX来将数据发送到flask路由而不刷新页面,数据似乎到达了路由,但它并没有改变render_template之后的文本。

MyForm 是一个简单的下拉列表。我试图在提交表单或单击按钮后显示当前选择的文本,而不使用 AJAX 刷新页面。

run.py

from flask import Flask, redirect, render_template, request, jsonify
from forms.myform import MyForm
import json
import plotly
import pandas as pd, numpy as np

server = Flask(__name__)

server.config.update(dict(
    SECRET_KEY="powerfulsecretkey",
    WTF_CSRF_SECRET_KEY="a csrf secret key"
))

@server.route("/", methods=["POST", "GET"])
def index():
    form = MyForm()
    choice = request.form.get('options')
    if form.validate_on_submit():
        choice = request.form.get('options')

    print(choice)

    return render_template("index.html", form=form, choice=choice)


if __name__ == "__main__":
    server.run()

表单

from flask_wtf import FlaskForm
import wtforms


class MyForm(FlaskForm):
    options = wtforms.SelectField(label="State", choices=[("SF", "SF"),
                                                          ("LA", "LA")])

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="POST" id="fm" action="/">
    {{ form.csrf_token }}
    <div>{{ form.options}}</div>
</form>
<button type="submit" form="fm" value="Submit">Submit</button>
<div>{{ choice }}</div>
</body>

<footer>
    <!-- jQuery -->
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script>
          $('form').on('submit', function(e){
                $.ajax({
                    type: 'POST',
                    data:$('form').serialize(),
                    url: '/',
                    success: function(data) {
                        console.log(data);
                    },
                    error: function(jqXHR) {
                        alert("error: " + jqXHR.status);
                        console.log(jqXHR);
                    }
                });
                e.preventDefault();
             });

            // Inject our CSRF token into our AJAX request.
            $.ajaxSetup({
            beforeSend: function(xhr, settings) {
                if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) {
                    xhr.setRequestHeader("X-CSRFToken", "{{ form.csrf_token._value() }}")
                }
            }
        })

    </script>
</footer>


</html>

浏览器 enter image description here

最佳答案

因为你是ajax提交的表单,页面没有重新渲染,Jinja2是渲染生效的

关于javascript - 在 Flask 应用程序中添加 Ajax 后,文本不会随 render_template 变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51336613/

相关文章:

javascript - 如何将javascript应用于已被jquery .html()覆盖的元素

javascript - gulp-rename 进行复制,但不替换

python - 如何在 python webdriver 中为 chrome 设置代理?

Python 和 Matplotlib : creating two subplots with different sizes

php - 为什么在我的 php 脚本中存储 session 数据会扰乱我的 Ajax 脚本?

php - 如何在 Laravel 中使用 AJAX 调用资源 Controller 的编辑方法?

javascript - 需要一种方法根据 a 标签的 href 将类添加到特定 div

javascript - 如何连接 MongoDB 中两个集合的数据?

python - Wasserstein GAN 的训练稳定性

javascript - AJAX POST 函数不上传文件