2016-09-23 51 views
-1

python/AJAX非常新,並且已經在從internet/flask文檔中的示例到目前爲止都在拼接。基本上我試圖做的是在點擊(從mapbox API)發送緯度和經度座標到燒瓶,並將這些數據打印到控制檯(以證明它已成功退出Flask,以便稍後可以使用它)。從html發送數據到python燒瓶服務器「GET/HTTP/1.1」405錯誤

數據我想發送的格式爲:

LngLat {lng: 151.0164794921875, lat: -33.79572045486767} 

HTML:

<button onclick=submit() type="button">POST</button> 

<script>  
map.on('click', function (e) { 
console.log(e.lngLat) 
}); 

function submit() { 
var myData = e.lngLat 
$.post("/", $("myData").serialize() 
); 
} 
</script> 

PY:

from flask import Flask 
from flask import request 
from flask import render_template 

app = Flask(__name__) 

@app.route('/', methods=['POST']) 
def home(): 
return render_template('index.html') 
print(request.form['myData']) 

if __name__ == '__main__': 
app.run(debug=True) 
當我嘗試從控制檯運行到本地主機

:5000我收到錯誤

127.0.0.1 - - [23/Sept/2016 23:21:15] "GET/HTTP/1.1" 405 - 

對不起,如果這是一個愚蠢的問題,但我很難過!感謝您的輸入

+0

沒有處理任何POST數據的代碼。 –

+0

你的chrome調試器網絡流量是什麼樣的? – GMarsh

+0

您還需要修復縮進並將您的打印語句移動到路線中的return語句之上 – GMarsh

回答

0

您收到405錯誤的原因是因爲您只有home()控制器,只接受POST方法。你正試圖用GET方法得到迴應。

所以,你需要改變methods論點@app.route()裝飾

@app.route('/', methods=['GET', 'POST']) 
def home(): 
    return render_template('index.html') 

但儘管如此,你沒有將處理你的AJAX請求的任何代碼。

0

在你的路線中,允許使用GET方法,否則html永遠不會呈現。

@app.route('/', methods=['POST', 'GET']) 

要打印緯度/經度到控制檯,首先檢查如果該方法是POST,然後打印:

if request.method == 'POST': 
    print(request.form.get('lng'), request.form.get('lat')) 

這是路徑所得到的代碼:

@app.route('/', methods=['POST', 'GET']) 
def home(): 
    if request.method == 'POST': 
     print(request.form.get('lng'), request.form.get('lat')) 
    return render_template('index.html')