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

当我使用表单操作提交表单数据时,我能够回复消息。

查看表单:

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

Register.HTML

 
email:
email cannot be blank
invalid email format
Password:
password cannot be blank
Enter password again:
verify password field cannot be blank


send another verification email {% endblock %}

现在我正在使用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 %} 
    {% for message in messages %}
  • {{ message }}
  • {% endfor %}
{% endif %} {% endwith %}

闪烁消息作为会话的一部分存储 ,并在服务器端呈现模板时检索。 客户端JavaScript无法访问会话cookie。 即使它是,它也不容易在JavaScript中解码。 即使您可以对其进行解码,也会假设会话是cookie而不是存储在服务器或其他内容上。

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

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

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

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

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