2016-11-13 63 views
0

有兩個<a>:都鏈接到同一onClick如何更新會話對象

<a id="100" onclick="createTriggered(this.id)"<i></i> Click Link </a> 
<a id="200" onclick="createTriggered(this.id)"<i></i> Click Link </a> 

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,並將其發送到燒瓶功能:

@app.route('/onClick') 
def onClick(): 
    session['a_id'] = request.args.get('a') 
    return ('ok') 

尾部er Flask函數獲取id它更新session對象創建新密鑰session['a_id']

最後,javascript window.alert用於檢查session對象是否具有應由Flask函數設置的新'a_id'鍵。當彈出window.alert時,它顯示新密鑰丟失。刷新頁面並重新點擊<a>鏈接將再次彈出window.alert(),但這次顯示新的session['a_id']密鑰在那裏。它看起來像session對象的更新滯後。我必須刷新頁面才能使瀏覽器獲取Flask函數所做的更改。有沒有辦法確保Flask函數對session對象所做的更新立即反映出來? 最後,因爲我正在更新整個會話的全局對象session,所以我真的不想返回任何模板或重定向到另一個鏈接。我只想要Flask函數來設置session變量,以便它可以在邏輯的某個地方使用。在這種情況下,從Flask函數返回一個虛擬字符串可以嗎?

回答

1

它看起來像會話對象的更新是滯後的。

它並不落後。問題是最初你沒有任何東西在你的session中,因此你的HTML頁面和你的javascript相當於 window.alert()

更新session之後,將頁面更新爲javascript代碼更新爲window.alert('a_id')

有沒有辦法確保Flask函數對會話對象所做的更新是否立即反映出來?

您可以檢查您的javascript回調來檢查cookie返回。該cookie是加密的,所以除非你知道如何解密它,否則你不會看到該值。不建議這樣做。但是,至少你可以看到cookie的價值發生了變化。