从html发送数据到python烧瓶服务器“GET/HTTP/1.1”405错误
问题描述:
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 -
对不起,如果这是一个愚蠢的问题,但我很难过!感谢您的输入
答
您收到405错误的原因是因为您只有home()
控制器,只接受POST
方法。你正试图用GET
方法得到回应。
所以,你需要改变methods
论点@app.route()
装饰
@app.route('/', methods=['GET', 'POST'])
def home():
return render_template('index.html')
但尽管如此,你没有将处理你的AJAX请求的任何代码。
答
在你的路线中,允许使用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')
没有处理任何POST数据的代码。 –
你的chrome调试器网络流量是什么样的? – GMarsh
您还需要修复缩进并将您的打印语句移动到路线中的return语句之上 – GMarsh