Проблема в вашем вызове ajax.По умолчанию $.ajax
отправляется как application/x-www-form-urlencoded
данные.Например:
{
a: 'foo',
b: 'bar',
c: 'baz',
d: null,
e: ''
}
преобразуется jQuery в:
a=foo&b=bar&c=baz&d=&e=
Кажется, jQuery приводит null
к пустой строке, поэтому он буквально отправляет пустую строку.JSON не существует.
Чтобы jQuery этого не делал, сделайте это самостоятельно:
$.ajax({
type: 'POST',
url: SOME_URL,
// Send a JSON string (NOT an object)
data: JSON.stringify({
foo: null
}),
// Tell Flask that it is a JSON string, so Flask parses as JSON
contentType: 'application/json; charset=utf-8',
success: function() {
// process response
}
});
В качестве примечания вы должны сделать это в Python:
data = request.get_json()
if 'foo' not in data:
# 'foo' does not exist
elif data['foo'] is None:
# 'foo' exists and is (js) null (python) None
elif data['foo'] == '':
# it is the empty string
Или, возможно, что-то вроде этого:
try:
foo = data['foo']
except KeyError:
# Handle no 'foo' key
else:
if foo is None:
# Handle None case
elif isinstance(foo, str):
# Handle string case
else:
logger.warn('[%s] foo is not a string or None, and instead %s', flask_session_info(), type(foo).__name__)