Flask无法处理Ajax GET请求中的json数据

时间:2019-02-15 23:21:51

标签: javascript python jquery flask

我尝试将jQuery AJAX请求发送到我的烧瓶服务器:

$.ajax({
            type: 'GET',
            url: '/get',
            dataType: "json",
            contentType:"application/json",
            data: JSON.stringify({ subject : "gpu",
                    filter : {
                        ids: [2, 3]
                        }
                    }),
            success: function (data) {
                console.debug(data);
            }
        });

然后我等待服务器的响应。服务器部分看起来像这样:

@api.route('/get', methods=['GET'])
def get():
    response = None
    try:
        data = request.get_json()
        response = do_some_magic(data)
    except Exception as e:
        respond = {'state': 'error', 'data': e.message}
    finally:
        return json.dumps(respond)

因此,此组合无效。 request仅具有args字段= ImmutableMultiDict([('{"subject":"gpu","filter":{"ids":[2,3]}}', u'')])json字段= None

但是当我在ajax请求中设置type: 'GET'并且在flask get方法methods=['GET']中时,服务器开始正确处理请求。

因此,这不是一个真正的问题,但是后来我尝试使用邮差实用程序发送GET请求。请求:

GET /get HTTP/1.1
Host: localhost:5000
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1d94d81c-7d93-4cf6-865a-b8e3e28278c1
{
    "subject": "gpu",
    "filter": {
        "ids": [
            2,
            3
        ]
    }
}------WebKitFormBoundary7MA4YWxkTrZu0gW--

flask代码与methods=['GET']一起使用。所以问题是,什么会导致这种行为?

1 个答案:

答案 0 :(得分:1)

来自jQuery documentation

  

数据   类型:PlainObject或字符串或数组   数据要发送到服务器。   如果还不是字符串,则将其转换为查询字符串。它被附加到GET请求的URL上。请参阅processData选项以防止这种自动处理。对象必须是键/值对。如果value是一个Array,则jQuery会根据传统设置(如下所述)的值使用相同的键序列化多个值。

如果processData设置为false,则意味着data字符串仍附加到URL,只是没有进行任何处理。

这可能是由于XMLHttpRequest.send()

的行为
  

send()接受一个可选参数,该参数可让您指定请求的正文;这主要用于PUT之类的请求。如果请求方法是GET或HEAD,则将忽略body参数,并将请求正文设置为null。