使用ajax时,Flask flash消息不再有效

2024-09-28 18:51:46 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用表单操作提交我的表单数据时,我能够快速返回消息。在

窗体视图:

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

在注册.HTML在

^{pr2}$

现在我使用ajax,我的flash消息不再出现。在

$(document).ready(function(){
   (code removed for clarity)

            if (error == false) {
                $.ajax({
                  type: "POST",
                  url: "/processRegister",
                  data: { varEmail: email, varPassword: pw}
                });//ajax call
            }//end if
        });//submit
    });//load validate.js
});//doc rdy

我处理表单数据的视图:

@app.route('/processRegister', methods=['POST'])
    def processRegister():
        if request.method == 'POST':
            email = request.form['varEmail']
            flash("message -----> " + email)
        return render_template('register.html')

“我的布局”页面使用以下代码段进行闪烁:

{% with messages = get_flashed_messages() %}
  {% if messages %}
    <ul class=flashes>
    {% for message in messages %}
      <li>{{ message }}</li>
    {% endfor %}
    </ul>
  {% endif %}
{% endwith %}

Tags: 数据register视图app消息表单messageif
2条回答

问题是AJAX调用不会重新呈现DOM。在

Javascript将作为调用的结果接收呈现的模板。在

我可以想象在jQuery的返回响应中,flash消息就在其中。在

浏览器不会将返回的值视为要呈现的内容。在

闪现的消息是stored as part of the session,在服务器端呈现模板时检索这些消息。客户端JavaScript无法访问会话cookie。即使是这样,也不容易用JavaScript解码。即使您可以解码它,也假设会话是一个cookie,而不是存储在服务器或其他东西上。在

如果您想呈现一些响应AJAX请求的消息,您应该在响应中发送这些消息,并在用JavaScript编写的处理程序中呈现它们。在使用重定向时,为了方便起见,提供了Flashed消息,但是由于您使用的是AJAX,所以您可以跳过中间步骤,直接返回消息。在

相关问题 更多 >