为什么 jquery $.post 命令不向服务器发送 JSON 数据

Why is the jquery $.post command not sending JSON data to the server

本文关键字:服务器 JSON 数据 jquery post 命令 为什么      更新时间:2023-09-26

我已经使用 $.getJSON 命令一段时间了。 但是由于我实际上是发布到服务器,我需要使用 $.post。 但是一旦我从$.getJSON切换到$.post,后端,即Flask Python框架,似乎没有收到任何JSON数据。 这是我唯一改变的。 $.post 的文档似乎表明,使用任一命令发送数据的格式是相同的。

有了$.getJSON,我可以使用request.args.get命令访问Flask中的JSON参数。 但是在更改为 $.post 后,request.args 是空的(所以 request.args.get() 总是返回 None)。 这是带有$.getJSON的javascript行:

$.getJSON("/admin/emails/ajax/send", {'data':JSON.stringify(data)}, function(){...})

然后想象一下那条线和$.post(...)

编辑 似乎问题是当我从"GET"更改为"POST"时,数据从 Flask 的request.args对象中消失了。 我尝试使用$.ajax方法并得到相同的结果。 有人知道为什么吗?

只需打开这个野兽并使用 $.ajax,这样你就不会被包装器绊倒。

$.ajax({
    type: 'POST',
    url: '/admin/emails/ajax/send',
    data: JSON.stringify(data),
    dataType: 'json',
    success: function(json){
        //the JSON response from the server
    }
});

好的,我想通了。 如果您以"GET"方法将 JSON 数据发送到服务器,Flask 会将 JSON 数据放入request.args。 相反,如果您以"POST"方法发送数据,Flask 会将数据放入request.form。 有点令人困惑,但无论如何。

上面的答案是正确的,但如果你想使用 $.post 你应该去服务器端添加一个标题:"内容类型:app/json"(像这样谷歌它)

您是否尝试过以这种方式$.post

$.post("/admin/emails/ajax/send", {'data':JSON.stringify(data)}, function(data){
   console.log(data);
}, "json");
//-^^^^^^-----------are you putting dataType here.