POST请求不适用于AJAX和Flask,出现错误415

POST request not working with AJAX & Flask, giving error 415

提问人:Anushka.N12 提问时间:8/23/2023 更新时间:8/23/2023 访问量:402

问:

我是 flask 和 js 的新手,最近几天一直在尝试将数据从表单发布到 API。

下面是 HTML 文件的脚本标记中提交按钮的代码:

function onclick()  {
  var formdata = {
    "name": $("#fnamei").val(),
    "email": $("#email").val(),
    "pnum": $("#password").val(),
    "dob": $("#dob").val()
  };
  formdata = {
    type: "POST",
    contentType: "application/json",
    headers: {                                  //added headers later to try
        'Accept': 'application/json',
        'Content-Type': 'application/json' 
    },
    data: JSON.stringify(formdata),
    body: JSON.stringify(formdata),     //added body later to try
    dataType: 'json',
    // url: "{{ url_for('login') }}"
    url: "/login"
  };
  $.ajax(formdata);
}

下面是 app.py 文件中的函数:

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    elif request.method == 'POST':
        return request.get_json()

当我提交表单时,我收到错误 415:不支持的媒体类型 - 未尝试加载 JSON 数据,因为请求 Content-Type 不是“application/json”。我已经多次提到内容类型,所以我不明白为什么它不被接受。

python jquery ajax flask 帖子

评论

0赞 PGHE 8/23/2023
你设置然后覆盖它。在发送 ajax 查询之前,请检查这是否是您期望发送的内容。formdataformdataconsole.log(formdata)
0赞 Anushka.N12 8/25/2023
完成,一切看起来都很好,直到 ajax 线......

答:

0赞 Yash 8/23/2023 #1

您似乎多次使用相同的变量,这会导致第一个声明的变量被取消。尝试使用以下解决方案。

如果仍然不起作用,请尝试使用

data : formdata1 .希望这能:)

function onclick()  {
  var formdata1 = {
    "name": $("#fnamei").val(),
    "email": $("#email").val(),
    "pnum": $("#password").val(),
    "dob": $("#dob").val()
  };
  var formdata2 = {
    type: "POST",
    contentType: "application/json",
    headers: {                                  
        'Accept': 'application/json',
        'Content-Type': 'application/json' 
    },
    data: JSON.stringify(formdata1),
    //body: JSON.stringify(formdata1),     
    dataType: 'json',
    // url: "{{ url_for('login') }}"
    url: "/login"
  };
  $.ajax(formdata2);
}

评论

0赞 Anushka.N12 8/25/2023
试过了,没有区别:(我忘了提到的一些细节 - 表单标签有 method = “post”,还有一个用于 jquery 的脚本标签,因为我使用的是 ajax。