jsonify字典列表,并作为ajax请求的响应发送

时间:2016-11-30 11:07:27

标签: jquery ajax rest flask

我目前正在尝试从我的服务器请求数据。我使用flask,我的响应函数从数据库获取数据并将其转换为稍后被jsonified的字典列表,如下所示:

@app.route('/database/customer/<int:customer_id>/', methods=['GET'])
def customer_id(customer_id):
    c, conn = connectionCust()
    computerdb = c.execute("SELECT * FROM Computers WHERE customer_id=(%s)", customer_id)
    computerdb = c.fetchall()

    computerList = []
    for computer in computerdb:
        computerDict = {
            'computer_id': str(computer[0]).strip('L'),
            'computer_name': computer[2]}
        computerList.append(computerDict)

    return jsonify(computerList)

如果我输入例如http://0.0.0.0:8080/database/customer/3 它会显示

[
  {
    "computer_id": "5", 
    "computer_name": "CUST3COMP1"
  }, 
  {
    "computer_id": "6", 
    "computer_name": "CUST3COMP2"
  }, 
  {
    "computer_id": "7", 
    "computer_name": "CUST3COMP3"
  }
]

我的ajax代码连接到下拉列表,说:

$('#customer').chosen().change(function(event){
                if(event.target == this){
                    $.ajax({ 
                       type: "GET",
                       dataType: "jsonp",
                       url: "http://0.0.0.0:8080/database/customer/" + $(this).val(),
                       success: function(data){        
                         alert(data);
                       }
                    });
                };
            });

但我无法提醒发回的数据,当我查看日志时,它说

127.0.0.1 - - [30/Nov/2016 13:02:06] "GET /database/customer/3?callback=jQuery112006497998475787305_1480507320739&_=1480507320740 HTTP/1.1" 301 -
127.0.0.1 - - [30/Nov/2016 13:02:06] "GET /database/customer/3/?callback=jQuery112006497998475787305_1480507320739&_=1480507320740 HTTP/1.1" 200 -

我认为jsonify()或者ajax代码有问题。那些对这些事情更熟悉的人可能对如何访问我的回复有一些意见? 感谢。

1 个答案:

答案 0 :(得分:1)

这似乎不是Flask方面的问题。尝试将Ajax调用dataType更改为 json 而不是jsonp并使用 async = false

$('#customer').chosen().change(function(event){
            if(event.target == this){
                $.ajax({ 
                   type: "GET",
                   dataType: "json",
                   async: false,
                   url: "http://0.0.0.0:8080/database/customer/" + $(this).val(),

                   success: function(data){        
                     alert(data);
                   },
                   error: function(data) {
                     alert(JSON.stringify(data));
                   }

                });
            };
        });