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

时间:2013-01-31 07:10:06

标签: javascript jquery json flask

我一直在使用$.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方法并获得相同的结果。有人知道为什么吗?

4 个答案:

答案 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.