You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

验证步骤

  1. 打开浏览器开发者工具(F12),切换到网络标签。
  2. 提交表单后,查看请求的Content-Type是否为application/json。
  3. 检查请求体(Payload)是否是你预期的表单JSON数据,而非AJAX配置内容。

内容的提问来源于stack exchange,提问作者Anushka.N12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:27:08