从function pass_values()
复制来自this post的答案之一的副本,数据部分除外。
我要使用下面的这段代码尝试获取客户端的当前位置(变量pos
)
,将位置数据存储到变量clientPosition
中,然后通过pass_values
将其发送到python代码。
如果它只是在不了解JavaScript的情况下被挤入变量clientPoisiton
中而使我惊讶的话,但甚至没有调用函数getPosition()
。
javascript (已编辑)
// some setting for google maps
var clientPoisiton;
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position){
var pos = {lat: position.coords.latitude,lng: position.coords.longitude};
clientPosition=pos;
}
// some exception handling
}
function pass_values()
{
$.ajax
(
{
type:'POST',
contentType:'application/json;charset-utf-08',
dataType:'json',
url:'http://127.0.0.1:5000/getPosition',
data: JSON.stringify(clientPosition),
success:function (data) {
var reply=data.reply;
if (reply=="success") {return;}
else {alert("some error ocured in session agent")}
}
}
);
}
pass_values.call(clientPosition);
Python
@app.route('/getPosition',methods=['POST'])
def getPosition():
data = request.get_json()
print(data)
return jsonify({'reply':'success'})
答案 0 :(得分:1)
pos
又名clientPosition
不是一个简单的值,它是具有lat和long属性的对象。您将无法像这样将其塞入网址的末尾。您将需要在python脚本中接受对象的JSON表示,或者让ajax发送两个数值(纬度和经度)并适当地接收它们。
您不打电话给pass_values-那么,您想在哪里打电话?对我来说最有意义的地方是地理位置成功功能。您最好将经/纬度值作为参数传递给pass_values,并避免使用全局变量。
由于使用的是POST,因此最好也将数据发布。当前,您使用post并将数据添加到URL字符串(用于GET请求的技术)。这违反了使用POST的目的。
所以:
// some setting for google maps
if (navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position){
pass_values(position.coords.latitude, position.coords.longitude);
});
// some exception handling
}
function pass_values(lat, long)
{
$.ajax
(
{
type:'POST',
contentType:'application/json;charset-utf-08',
dataType:'json',
url:'http://127.0.0.1:5000/getPosition',
data: {
lat: lat,
long: long
},
success:function (data) {
var reply=data.reply;
if (reply=="success") {return;}
else {alert("some error ocured in session agent")}
}
}
);
}
现在,我并没有真正使用python,所以这部分是个猜测-它必须接受json帖子并检索存储在其中的两个值。
@app.route('/getPosition',methods=['POST'])
def getPosition():
data=request.get_json()
lat = data.get('lat', '')
long = data.get('long', '')
return jsonify({'reply':'success'})