2013-05-06 110 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

相關問題