Javascript不会更新会话,只有页面重新加载才能完成工作

时间:2012-10-13 18:06:06

标签: javascript python flask

会话在python代码中设置。我用烧瓶作为框架。在用户重新加载页面之前,会话用户名值保持不变。如果有办法用javascript响应会话值的变化或重新加载必要的部分而不重新加载整个页面?谢谢。

的index.html:

<div id="cform">
    <form action="" method="get">
        <div class="cl">{{ session['username'] }}$ >
            <input type="text" class="cli" name="cmd"
            autocomplete='off' value="" autofocus />
        </div>
    </form>
</div>
<script type=text/javascript>
    $(function () {
        $('form').last().submit(function () {
            $.getJSON($SCRIPT_ROOT + '/_cmd', {
                cmd: $('input[name="cmd"]').last().val()
            }, function (data) {
                var $query = $('input[name="cmd"]').last().val();
                $("<span>{{ session['username'] }}$ > " + $query + "</span><br />").appendTo("#output");
                $(data).each(function (i, val) {
                    $.each(val, function (k, v) {
                        $("<span>" + v + "</span><br />").appendTo("#output");
                    });
                });
                $("#output").append($("form"));
                $("form input").val("").focus();
            });
            return false;
        });
    });
</script>
<div id="output"></div>

index.py:

@app.route('/')
def index():
  if 'username' in session:
    username = escape(session['username'])
  else:
    session['username'] = 'guest'

  return render_template('index.html')

@app.route('/_cmd')
def cmd():
  cmd = request.args.get('cmd')
  interpreter = Interpreter(cmd)
  output = interpreter.mediator()
  return jsonify(output)

1 个答案:

答案 0 :(得分:0)

我不知道Flask,但在我看来你在那里犯了错误:

 $("<span>{{ session['username'] }}$ > " + $query + "</span><br />").appendTo("#output");

这里只有在用户加载页面时才设置好用户名,即使用户使用udpate也是如此。

你应该做的事情如下:

  $("<span>"+data[username] + $query + "</span><br />").appendTo("#output");

在你的后端,有类似的东西:

  def cmd:
    ...
    output[username] = session["username"]
    ...