有两个<a>
:
<a id="100" onclick="createTriggered(this.id)"<i></i> Click Link </a>
<a id="200" onclick="createTriggered(this.id)"<i></i> Click Link </a>
都链接到相同的onClick
javascript函数:
<script type=text/javascript>
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
function onClick(id){
var data = $.getJSON($SCRIPT_ROOT + '/triggered', {a:id} );
window.alert({{ "session.keys()" }});
}
</script>
此javascript函数获取单击的<a>
id并将其发送到flask函数:
@app.route('/onClick')
def onClick():
session['a_id'] = request.args.get('a')
return ('ok')
Flask功能获得id
后,它会更新session
对象,从而创建新密钥session['a_id']
。
最后,javascript window.alert
用于检查session
对象是否包含新的&#39; a_id&#39;应该已经由Flask函数设置的键。当弹出window.alert
时,它会显示缺少新密钥。刷新页面并重新点击<a>
链接会再次弹出window.alert()
,但这次会显示新的session['a_id']
密钥。看起来session
对象的更新滞后了。我必须刷新页面,以便浏览器获取Flask功能所做的更改。有没有办法确保Flask函数对session
对象所做的更新立即反映出来?
最后,因为我正在更新整个会话的全局session
对象,所以我真的不想返回任何模板或重定向到另一个链接。我想要的只是Flask函数来设置session
变量,因此它可以在逻辑的某个地方使用。在这种情况下,从Flask函数返回一个虚拟字符串是否可以?
答案 0 :(得分:1)
看起来会话对象的更新滞后。
这不是滞后的。问题是,您最初在session
中没有任何内容,因此您的HTML页面和您的javascript相当于
window.alert()
。
更新session
后,重新呈现网页会将javascript代码更新为window.alert('a_id')
。
有没有办法确保Flask函数对会话对象所做的更新立即得到反映?
您可以检查您的javascript回调以检查Cookie返回。 Cookie已加密,因此除非您知道如何解密,否则您将看不到该值。不建议这样做。但是,至少可以看到cookie的值已更改。