Передача значения из JavaScript в Python с помощью AJAX - PullRequest
0 голосов
/ 07 декабря 2018

От function pass_values() - копия, вставленная из одного из ответов этого сообщения , за исключением части данных.

То, что я пытаюсь сделать с помощью приведенного ниже кода, - это получить текущее местоположениеклиента (переменная pos), сохраните данные о местоположении в переменную clientPosition и отправьте их в код Python через pass_values.

Я был бы удивлен, если бы он работал так, как я только что сжал впеременная clientPoisiton без каких-либо знаний о JavaScript, но функция 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 голосов
/ 07 декабря 2018

pos aka clientPosition - не простое значение, это объект с широтой и длинными свойствами.Вы не сможете заклинить его до конца своего URL таким образом.Вам нужно будет либо принять JSON-представление объекта в вашем скрипте Python, либо попросить ajax отправить два числовых значения (lat и long) и получить их соответствующим образом.

Вы не вызываете pass_values ​​- Итак, гдеВы бы хотели это назвать?Самое важное для меня место - функция успеха геолокации.Вы также можете передать значения lat / long в качестве параметра в pass_values ​​и избегать использования глобальной переменной.

Поскольку вы используете POST, вы также можете 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'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...