2013-05-06 103 views
1

我无法在服务器端获取请求数据。当我提到网络代码时,我是一个新手。这是我(简化)代码:发布到Bottle服务器。我如何获取请求数据?

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发送数据时获取数据的正确方法是什么?

+0

警报窗口中的数据看起来不错?如果是这样,那么你必须仔细研究请求中的商店。我不确定它会是request.json – pypat 2013-05-06 10:17:33

+0

它从来没有达到回调。 – MdaG 2013-05-06 14:02:16

回答

3

设置数据类型为"json"只告诉jQuery的如何interptet的响应,它doesnt't变更请求的格式,这仍然是发送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。

+0

谢谢。这解决了检索服务器上的数据。现在我需要弄清为什么我的回调没有被触发,但这超出了这个问题的范围。 – MdaG 2013-05-06 14:21:42

+0

找出回调没有触发的原因,它与我的问题或答案中的任何内容无关。 – MdaG 2013-05-06 14:42:56

+0

你能告诉我你是如何在Python中使用Bottle的吗? – Guru 2016-10-05 07:14:38

相关问题