Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从Flask会话检索值时出现KeyError_Jquery_Ajax_Python 3.x_Session_Flask - Fatal编程技术网

Jquery 从Flask会话检索值时出现KeyError

Jquery 从Flask会话检索值时出现KeyError,jquery,ajax,python-3.x,session,flask,Jquery,Ajax,Python 3.x,Session,Flask,我有一个Flask应用程序,它在数据库中存储一些值。这些来自HTML表单。其中一些将使用以下代码添加到Flask的会话中: session['userID']=str(cur_var.getvalue()) 我有一个调试HTML页面,只显示当前会话中存储的内容。呈现此页面的代码如下所示: @app.route('/debug/') def debug(): return str(session) 一旦我打开这一页 <securecookiesession {'usercoord'

我有一个Flask应用程序,它在数据库中存储一些值。这些来自HTML表单。其中一些将使用以下代码添加到Flask的会话中:

session['userID']=str(cur_var.getvalue())

我有一个调试HTML页面,只显示当前会话中存储的内容。呈现此页面的代码如下所示:

@app.route('/debug/')
def debug():
    return str(session)
一旦我打开这一页

<securecookiesession {'usercoord': 7.0,'userid': '53.0'}></securecookiesession>
此外,我还制作了一个非常简单的网页,只需打印
会话['userID']
。我在Flask应用程序中使用以下代码:

@app.route('/print/')
def printing():
    return render_template('print.html', printing=session['userid'])
这是print.html模板:

{% extends "layout.html" %}
{% block content %}
{{ printing }}
{% endblock %}
这会产生以下错误:

<title>KeyError: 'userid' // Werkzeug Debugger</title>
builtins.KeyError
KeyError: 'userid'
我已经在一个小得多的应用程序上尝试了同样的逻辑,并且效果很好。我的错误在哪里

非常感谢您能提供的任何帮助

附言。 如果有任何用处,我将使用jQuery处理网页和Flask应用程序之间的交互,并使用AJAX发布数据

更新

在重新设计项目以将其简化为一个更简单的项目之后,我发现有时(出于我不理解的原因),向Flask会话添加新的值将不起作用。例如,如果我包括这行代码:

session['coordid']=float(cur_var.getvalue())


在我的print.html页面中查看
str(session)
,我看不到键
coordid

,问题与AJAX的异步性有关。如果您调用两个不同的jQuery函数,每个函数都带有一个AJAX调用,那么很可能有一个函数会请求尚未处理的数据

在本例中,您有一个进行AJAX调用的函数,Python会捕获该函数。Python应用程序从调用中获取数据并将其存储到数据库中。同时,Python还负责另一个AJAX调用。但是,由于并非所有信息都已在第一次调用中完成处理,因此您会得到
keyrerror

我尝试了几种方法来解决这个问题:

  • 使用回调;然而,正如Lazaris(2012)在他的文章中所指出的,“如果函数包含某种异步执行(如Ajax调用或动画),那么回调将在异步操作开始后执行,但可能在异步操作完成之前执行。”

  • 调用AJAX成功回调中的第二个函数,但这不起作用

  • 最后,解决方案是在Python应用程序中添加以下代码。在执行依赖于添加到会话的值的函数之前,请检查此值是否存在:

    count=1000
    而不是会话['coordid']和计数:
    计数-=1


    • 问题在于AJAX是如何异步的。如果您调用两个不同的jQuery函数,每个函数都带有一个AJAX调用,那么很可能有一个函数会请求尚未处理的数据

      在本例中,您有一个进行AJAX调用的函数,Python会捕获该函数。Python应用程序从调用中获取数据并将其存储到数据库中。同时,Python还负责另一个AJAX调用。但是,由于并非所有信息都已在第一次调用中完成处理,因此您会得到
      keyrerror

      我尝试了几种方法来解决这个问题:

      • 使用回调;然而,正如Lazaris(2012)在他的文章中所指出的,“如果函数包含某种异步执行(如Ajax调用或动画),那么回调将在异步操作开始后执行,但可能在异步操作完成之前执行。”

      • 调用AJAX成功回调中的第二个函数,但这不起作用

      • 最后,解决方案是在Python应用程序中添加以下代码。在执行依赖于添加到会话的值的函数之前,请检查此值是否存在:

        count=1000
        而不是会话['coordid']和计数:
        计数-=1