使用ajax将值从javascript传递到python

时间:2018-12-07 13:24:32

标签: javascript python html flask

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'})

1 个答案:

答案 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'})