关于jquery:使用ajax时,Flask flash消息不再有效

Flask flash message no longer works when using ajax

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

查看表单:

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

Register.HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form action="{{ url_for('processRegister') }}" method=post>
        <dl>
          <dt>email:
          <dd><input type="text" name="email" id="email">
          <font color="red">email cannot be blank</font>
          <font color="red">invalid email format</font>
          <dt>Password:
          <dd><input type="password" name="password" id="password">
          <font color="red">password cannot be blank</font>
          <dt>Enter password again:
          <dd><input type="password" name="password2" id="password2">
          <font color="red">verify password field cannot be blank</font>
          <dd><input type="submit" value="submit" id="submit">
        </dl>
        </form>
      send another verification email
    {% endblock %}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
$(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

我对处理表单数据的看法:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{% with messages = get_flashed_messages() %}
  {% if messages %}
    <ul class=flashes>
    {% for message in messages %}
     
<li>
{{ message }}
</li>

    {% endfor %}
   
</ul>

  {% endif %}
{% endwith %}


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

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


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

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

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

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