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

Javascript 为什么jquery$.post命令不向服务器发送JSON数据,javascript,jquery,json,flask,Javascript,Jquery,Json,Flask,我已经使用$.getJSON命令一段时间了。但由于我实际上是在向服务器发送邮件,所以我需要使用$.post。但只要我从$.getJSON切换到$.post,后端(Flask Python框架)似乎就不会接收任何JSON数据。这是我唯一改变的。的文档似乎表明,使用任一命令发送数据的格式相同 使用$.getJSON,我可以使用request.args.get命令访问Flask中的JSON参数。但是更改为$.post后,request.args为空(因此request.args.get()始终返回No

我已经使用
$.getJSON
命令一段时间了。但由于我实际上是在向服务器发送邮件,所以我需要使用$.post。但只要我从
$.getJSON
切换到
$.post
,后端(Flask Python框架)似乎就不会接收任何JSON数据。这是我唯一改变的。的文档似乎表明,使用任一命令发送数据的格式相同

使用
$.getJSON
,我可以使用request.args.get命令访问Flask中的JSON参数。但是更改为$.post后,request.args为空(因此request.args.get()始终返回None)。下面是带有
$的javascript行。getJSON

$.getJSON("/admin/emails/ajax/send", {'data':JSON.stringify(data)}, function(){...})
然后想象一下,那一行改为
$.post(…)


编辑问题似乎是当我从“获取”更改为“发布”时,数据从Flask的
请求.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
    }
});

上面的答案是正确的,但如果你想使用$。post u应该在服务器端添加一个标题:“Content type:app/json”(类似于谷歌it)

你是否尝试过
$。post
这样:

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

好吧,我知道了。如果以“GET”方法向服务器发送JSON数据,Flask会将JSON数据放入
request.args
。相反,如果您使用“POST”方法发送数据,Flask会将数据放入
request.form
。有点困惑,但不管怎样。

为什么?这不是要设置响应的内容类型吗?该参数指定响应的预期类型。OP的问题是服务器端代码无法访问请求中的数据。好的,就这样,它确实像您拥有它一样工作……但是当我将类型:'POST'更改为类型:'GET'时,我收到了JSON数据。Flask似乎将“POST”数据放在了其他地方。