【问题标题】:Why is the jquery $.post command not sending JSON data to the server为什么 jquery $.post 命令不向服务器发送 JSON 数据
【发布时间】:2023-03-11 04:17:01
【问题描述】:

我使用$.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(...)

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

【问题讨论】:

    标签: javascript jquery json flask


    【解决方案1】:

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

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

    【讨论】:

    • 好的,只是这个,它确实像你拥有它一样工作......但是当我将 type:'POST' 更改为 type:'GET' 时,我收到了 JSON 数据。 Flask 似乎将“POST”数据放在了其他地方。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      上面的答案是正确的,但如果想使用 $.post 你应该去服务器端并添加一个标题:“Content-type: app/json”(类似这样的 google it)

      【讨论】:

      • 为什么?这不是要设置响应的内容类型吗?
      【解决方案4】:

      你试过$.post这种方式吗:

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

      【讨论】:

      • 该参数指定响应的预期类型。 OP的问题是服务器端代码无法访问request中的数据。
      猜你喜欢
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      相关资源
      最近更新 更多