我尝试将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']
一起使用。所以问题是,什么会导致这种行为?
答案 0 :(得分:1)
数据 类型:PlainObject或字符串或数组 数据要发送到服务器。 如果还不是字符串,则将其转换为查询字符串。它被附加到GET请求的URL上。请参阅processData选项以防止这种自动处理。对象必须是键/值对。如果value是一个Array,则jQuery会根据传统设置(如下所述)的值使用相同的键序列化多个值。
如果processData
设置为false
,则意味着data
字符串仍附加到URL,只是没有进行任何处理。
这可能是由于XMLHttpRequest.send()
send()接受一个可选参数,该参数可让您指定请求的正文;这主要用于PUT之类的请求。如果请求方法是GET或HEAD,则将忽略body参数,并将请求正文设置为null。