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