繁体   English   中英

使用Flask和Ajax将JSON对象返回到View

[英]Return JSON object to View with Flask and Ajax

我正在尝试使用AJAX将python字典返回到视图并从JSON文件读取,但是到目前为止,我只返回了[object Object],[object Object] ...

如果检查网络流量,我确实可以看到正确的数据。

这就是我的代码的样子。 我有一个基于所选ID的类和方法(请求参数方法),将打印特定数据。 它从python任意获取数据。 问题不在这里,已经测试过了。 但以防万一我将其链接。

#创建定向程序的方法-以防万一#

def getCourselist_byClass(self, classid):
        """
        Getting the courselist by the class id, joining the two tables. 
        Will only get data if both of them exist in their main tables.
        Returning as a list.
        """
        connection = db.session.connection()
        querylist = []
        raw_sql = text("""
           SELECT
                course.course_id,
                course.course_name
            FROM
                course
            WHERE
                EXISTS(
                    SELECT 1
                    FROM
                        class_course_identifier
                    WHERE
                        course.course_id = class_course_identifier.course_id
                    AND EXISTS(
                        SELECT 1
                        FROM
                            class
                        WHERE
                            class_course_identifier.class_id = class.class_id
                        AND class.class_id = :classid
                    )
                )""")
        query = connection.engine.execute(raw_sql, {'classid': classid})
        for column in query:
            dict = {
                'course_id'     : column['course_id'],
                'course_name'   : column['course_name']
            }
            querylist.append(dict)

        return querylist

我的jsonify路由方法

@main.route('/task/create_test')
def get_courselist():
    #objects
    course = CourseClass()
    class_id = request.args.get('a',  type=int)    
    #methods
    results = course.getCourselist_byClass(class_id)
    return jsonify(result=results)

的HTML

这是输入字段以及应该在哪里链接数据的样子。

<input type="text" size="5" name="a">
        <span id="result">?</span>
        <p><a href="javascript:void();" id="link">click me</a>

然后我这样称呼它

<script type=text/javascript>
    $(function() {
        $('a#link').bind('click', function() {
          $.getJSON("{{ url_for('main.get_courselist') }}", {
            a: $('input[name="a"]').val()
          }, function(data) {
            $("#result").text(data.result);
          });
          return false;
        });
    });
  </script>

但是每次我在该字段中输入ID号时,我都会获得正确的数据。 但格式不正确。 相反,它像[object Object]一样打印

资料来源,并以此指南为灵感: flask ajax示例

flask.json.jsonify的API描述表明它需要关键字参数。 您实际上想要执行的操作似乎是对包含字典的列表对象进行序列化,您是否尝试过flask.json.dumps呢? 假设您已经导入了dumps符号,而不是您的jsonify调用,您可以尝试:

return dumps(results)

服务器返回的数据类似于: {result: [{course_id: 'xxx', course_name: 'xxx'}]} ,其中data.result是一个JS数组。

当您将其设置为$("#result").text() ,JS将数组转换为字符串,因此结果为[object Object]

您应该遍历数组以构造一个字符串,然后在DOM中设置该字符串,例如:

courseStr = data.result.map(function(course) {return course.course_id + '-' +   course.course_name; }).join(',');
$("#result").text(courseStr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM