Ajax POST请求返回Bad Request错误,JSON校验正常该如何排查解决?
问题根因
- 核心问题是jQuery AJAX请求的实际传输格式和声明的Content-Type不匹配:你设置了
contentType: 'application/json;charset=UTF-8',但直接传入JS对象作为data参数时,jQuery默认会将对象序列化为application/x-www-form-urlencoded格式的键值对字符串(你贴的请求负载stop_date=1623758400000&start_date=1623708000000就是典型的表单格式),不属于合法JSON结构。 - 后端Flask收到请求后,尝试按
application/json解析请求体失败,无法生成request.json对象,直接返回了400 Bad Request错误。
修复方案
前端代码修改
把AJAX请求的data参数用JSON.stringify()序列化,确保传输的是JSON格式字符串即可:
// Parse datetime to timestamp and include data in a dict let data_dict = { "stop_date": Date.parse(sup_limit.value), "start_date": Date.parse(inf_limit.value) } // Send the Ajax request let request = $.ajax({ url: url, type: 'POST', data: JSON.stringify(data_dict), // 新增JSON序列化逻辑 contentType: 'application/json;charset=UTF-8', });
后端可选优化(非必须,规避后续潜在报错)
当前后端代码仅在mode == 'custom'的分支中定义了start_date和stop_date,如果mode传入其他值,后续调用get_last_test_influx_record时会出现变量未定义错误,建议补充默认值或者异常分支判断。
内容的提问来源于stack exchange,提问作者deadlock
相关产品推荐
相关产品推荐

