我一直在使用$.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
方法并获得相同的结果。有人知道为什么吗?
答案 0 :(得分:2)
打开这个野兽并使用$ .ajax,这样你就不会绊倒包装器。
$.ajax({
type: 'POST',
url: '/admin/emails/ajax/send',
data: JSON.stringify(data),
dataType: 'json',
success: function(json){
//the JSON response from the server
}
});
答案 1 :(得分:1)
好的,我明白了。如果您使用'GET'方法将JSON数据发送到服务器,Flask会将JSON数据放入request.args
。相反,如果您使用“POST”方法发送数据,Flask会将数据放入request.form
。有点令人困惑,但无论如何。
答案 2 :(得分:0)
以上答案是正确的,但是如果想使用$ .post你应该去服务器端并添加一个标题:“Content-type:app / json”(像这样的谷歌吧)
答案 3 :(得分:0)
您是否以这种方式尝试$.post
:
$.post("/admin/emails/ajax/send", {'data':JSON.stringify(data)}, function(data){
console.log(data);
}, "json");
//-^^^^^^-----------are you putting dataType here.