在javascript发送请求后,不会显示烧瓶闪存消息

时间:2017-07-15 13:51:42

标签: javascript python flask

index.html页面中,我有以下用于加载Flash消息的Jinja模板代码

{% for message in get_flashed_messages() %}
<div class='alert alert-warning'>
  <button type='button' class='close' data-dismiss='alert'> &times; </button>
  {{ message }}
</div>
{% endfor %}

和可以点击的注销文本(这里使用了Vue.js)

<ul class='nav navbar-nav navbar-right' v-if='signedIn'>
  <li> <a @click='onLogout'>Logout</a> </li>
</ul>

和相关的javacript代码是

onLogout: function(){
  axios.get('/auth/logout')
       .then(response => {
         this.signedIn = false;
       })
       .catch(error => {console.log(error);})
},

并且请求处理程序是

@auth.route('/logout')
def logout():
    flash('You have logged out.')
    return redirect(url_for('home.index'))

鉴于上述设置,注销有效,但不显示闪光灯。这是什么原因,我该如何解决?感谢。

1 个答案:

答案 0 :(得分:0)

在呈现index.html模板时,即在页面加载时,代码中的Flash消息仅 显示。

但是,您从AJAX(一个简单的/logout请求)调用XMLHttpRequests端点,并且重定向到home.index仅在AJAX响应中发生,而不是在站点/页面上发生 - 水平。此响应的处理程序仅设置this.signedIn = false;,仅此而已。

要解决此问题,您有两个选项,(1)在注销子请求完成后,在您的then处理程序中将用户重定向到索引页;或者更复杂的(2),返回应该&#34;闪烁的消息列表&#34;在AJAX响应中,并从JavaScript手动显示它们,替换(或附加)到现有消息。