2016-11-13 4 views
0

Mit zwei <a>:So aktualisieren Sitzungsobjekt

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

beide im Zusammenhang mit der gleichen onClick JavaScript-Funktion:

<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> 

Diese JavaScript-Funktion, die angeklickt <a> id nimmt und sendet diese Funktion in den Kolben:

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

Achtern er Flask Funktion wird id es aktualisiert session Objekt erstellen einen neuen Schlüssel session['a_id'].

Schließlich Javascript window.alert wird verwendet, um zu überprüfen, ob das session Objekt hat die neue 'a_id' Taste, die bereits durch Flask-Funktion festgelegt werden sollte. Wenn window.alert erscheint, wird angezeigt, dass der neue Schlüssel fehlt. Aktualisieren der Seite und erneutes Klicken auf die <a> Link wird die window.alert() wieder auftauchen, aber dieses Mal zeigt die neue session['a_id'] Schlüssel ist da. Es sieht so aus, als ob das Update des Objekts session hinterherhinkt. Ich muss die Seite aktualisieren, damit der Browser die von der Flask-Funktion vorgenommene Änderung übernimmt. Gibt es eine Möglichkeit, sicherzustellen, dass das Update von der Flask-Funktion auf das session Objekt sofort reflektiert wird? Schließlich, da ich das Objekt, das für die gesamte Sitzung global ist, aktualisieren möchte ich wirklich keine Vorlage zurückgeben oder an einen anderen Link umleiten. Alles, was ich will, ist die Flask-Funktion, um die Variablen session so einzustellen, dass sie irgendwo in der Logik verwendet werden kann. Wäre es in Ordnung, in diesem Fall einen Dummy-String von der Flask-Funktion zurückzugeben?

Antwort

1

Es sieht so aus, als ob die Aktualisierung des Sitzungsobjekts hinterherhinkt.

Es ist nicht verzögert. Das Problem ist, dass Sie ursprünglich nichts in Ihrer session haben, also Ihre HTML-Seite und Ihr Javascript entspricht window.alert().

Nachdem Sie Ihre session aktualisieren, Rendern Sie die Seite aktualisieren Sie den JavaScript-Code auf window.alert('a_id').

Gibt es eine Möglichkeit sicherzustellen, dass die von der Flask-Funktion an das Sitzungsobjekt vorgenommene Aktualisierung sofort widergespiegelt wird?

Sie können Ihren Javascript-Callback überprüfen, um die Cookie-Rückgabe zu überprüfen. Der Cookie ist verschlüsselt, so dass Sie den Wert erst sehen, wenn Sie ihn entschlüsseln können. Es wird nicht empfohlen, dies zu tun. Sie können jedoch zumindest sehen, dass der Wert des Cookies geändert wird.

Verwandte Themen