【问题标题】:Posting to Bottle server. How do I get the request data?发布到 Bottle 服务器。如何获取请求数据?
【发布时间】:2013-05-06 18:23:50
【问题描述】:

我无法在服务器端获取请求数据。当谈到网络代码时,我是一个新手,请耐心等待。这是我的(简化的)代码:

html

<form id="form" action="http://localhost:8080/report" enctype="multipart/form-data" method="POST">
    <div name="navigation-bar" id="navigation-bar">
        <input type="submit" value="Post" onclick="post()" />
    </div>
 </form>

js

function post() {
    $.post("http://localhost:8080/report",
            {"id": 1},
            function(data) {
                alert(data);
            },
            "json");
}

py

@route('/report', method='POST')
def report():
    payload = request.json
    return payload

有效负载始终为无。使用 jQuery 发送时获取数据的正确方法是什么?

【问题讨论】:

  • 警报窗口中的数据看起来不错?如果是这样,那么您必须仔细查看请求中存储的内容。我不确定它会是 request.json
  • 它永远不会到达回调。

标签: jquery python bottle


【解决方案1】:

将数据类型设置为"json"只是告诉jquery如何解释响应,它不会改变请求的格式,仍然发送application/x-www-form-urlencoded

但是bottlejson handling只有在使用application/json的正确内容类型发送请求时才有效,所以如果你想使用它,你需要手动设置请求的内容类型和编码对json的请求数据:

function post() {
    $.ajax({
        url: "/report",
        type: "POST",
        data: JSON.stringify({"id": 1}),
        contentType: "application/json",
        dataType: "json",
        success: function(data) {
            alert(data);
        }
    });
}

这仅适用于使用 javascript 提交,普通表单提交不起作用,这意味着您应该将提交按钮更改为普通按钮或确保您的 oncklick 返回 false。

【讨论】:

  • 谢谢。这解决了在服务器上检索数据的问题。现在我需要弄清楚为什么我的回调没有被触发,但这超出了这个问题的范围。
  • 找出未触发回调的原因,与我的问题或您的回答中的任何内容无关。
  • 你能告诉我你是如何在 python 中使用 Bottle 做到这一点的吗?
  • @Guru 没什么,如果您发送具有正确 json 内容类型的请求,那么在处理它的路由中bottle.request.json 将包含解析的 json 对象。
  • @mata 你的意思是这个 (pastebin.com/raw/izRneX51) 应该打印 json 字符串,但它没有打印任何东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
相关资源
最近更新 更多