2016-09-23 2 views
-1

非常にpython/AJAXの新機能であり、インターネット/フラスコのドキュメントの例からすべてを継承しています。基本的に私がやってみたいことは、フックに緯度と経度の座標を(マップボックスAPIから)フラスコに送り、そのデータをコンソールに出力しておくことです(Flaskが正常に終了したことを証明して後で動作させることができます)。 PYhtmlからPythonフラスコサーバーにデータを送信する "GET/HTTP/1.1" 405エラー

<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> 

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

LngLat {lng: 151.0164794921875, lat: -33.79572045486767} 

HTML:私は送信しようとしています

データは次のようにフォーマットされエラーが発生する

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

これは愚かな質問だと申し訳ありませんが、私はすぐに困惑しています!あなたの入力をありがとう

+0

POSTデータの任意の時刻を処理するコードはありません。 –

+0

クロームデバッガのネットワークトラフィックはどのように見えますか? – GMarsh

+0

また、インデントを修正し、あなたのルートのreturnステートメントの上にprintステートメントを移動する必要があります – GMarsh

答えて

0

POSTの方法しか受け入れていないhome()コントローラしか持っていないため、405エラーが発生する理由があります。そして、あなたはGETメソッドで応答を得ようとしています。

だから、@app.route()デコレータ

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

methods引数を変更する必要がある。しかし、まだ、あなたはあなたのAJAXリクエストを処理する任意のコードを持っていません。

0

あなたのルートでは、GETメソッドを許可してください。それ以外の場合、html wilはレンダリングされません。この方法は、POSTある場合、コンソールにLNG/LAT最初のチェックを印刷するために

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

、それを印刷:

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') 
関連する問題