Flask与AJAX POST请求报错415:不支持媒体类型问题求助
问题分析与解决方案
你的问题核心是变量覆盖导致请求体内容错误,加上混用了原生Fetch和jQuery AJAX的参数,才触发415 Unsupported Media Type错误。
错误点拆解
- 你先定义
formdata存储表单数据,随后又把同一个变量赋值为AJAX配置对象,导致JSON.stringify(formdata)实际序列化的是AJAX配置,而非目标表单数据。 - jQuery的
$.ajax不支持body参数(这是原生Fetch API的用法),只需用data传递请求体即可。 - 同时设置
contentType和headers里的Content-Type属于重复配置,可能引发参数冲突。
修正后的前端代码
function onclick() { // 单独存储表单数据,避免被后续配置覆盖 var formData = { "name": $("#fnamei").val(), "email": $("#email").val(), "pnum": $("#password").val(), "dob": $("#dob").val() }; // 用独立变量配置AJAX请求,不干扰表单数据 $.ajax({ type: "POST", url: "/login", contentType: "application/json", // 这里设置足够,无需在headers重复 dataType: "json", data: JSON.stringify(formData), // 传入正确的表单数据序列化结果 // 可选:添加回调查看请求状态 success: function(response) { console.log("响应数据:", response); }, error: function(xhr, status, error) { console.error("请求错误:", status, error); } }); }
后端代码优化(可选)
可以增加判断逻辑,确保请求处理更健壮:
from flask import Flask, render_template, request, jsonify @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'GET': return render_template('login.html') elif request.method == 'POST': json_data = request.get_json() if not json_data: return jsonify({"error": "未接收到有效JSON数据"}), 400 return jsonify(json_data)
验证步骤
- 打开浏览器开发者工具(F12),切换到网络标签。
- 提交表单后,查看请求的
Content-Type是否为application/json。 - 检查请求体(Payload)是否是你预期的表单JSON数据,而非AJAX配置内容。
内容的提问来源于stack exchange,提问作者Anushka.N12
相关产品推荐
相关产品推荐

