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消息就在其中。
浏览器不会将返回的值视为要呈现的内容。