Я пишу веб-приложение на Python. У меня есть форма, которая принимает в качестве входных данных две указанные пользователем записи, одна из которых является текстовым полем, а другая - выбором. После отправки я получаю эти записи и сохраняю их в базе данных, которая затем запрашивается и публикуется. В любом случае, требуется JavaScript, чтобы получить пользовательские координаты, которые мне нужны, и у меня есть JavaScript, встроенный в мой шаблон, и предполагается, что он вводит координаты в «скрытые» поля ввода. Я не могу позвонить и успешно получить содержимое этих элементов с помощью стандартного вызова (с использованием GAE и Python)

latitude = self.request.get("latitude")
longitude = self.request.get("longitude")

Вот встроенные элементы ввода JavaScript и формы:

   <script>
   function get_location()      {
                            if (navigator.geolocation)      {
                            navigator.geolocation.getCurrentPositon(showPosition);
                            } else {
                                    alert('It appears geolocation isnt enabled.');
                            }
                    }
                    function showPosition(position)
                            {
                            $("#latitude").val(position.coords.latitude);
                            $("#longitude").val(position.coords.longitude);
                    }
    </script>

    <input type="hidden" name="latitude" id="latitude" />
    <input type="hidden" name="longitude" id="longitude" />
    <br>
    <input type="submit" onclick="get_location()" value="Update">

К вашему сведению, это все в одной форме. Таким образом, теоретически, это должно генерировать широту и долготу пользователя, а затем передавать эти значения в соответствующие поля ввода. Есть ли очевидная причина, по которой это не работает? Заранее спасибо.

0
madman2890 30 Янв 2013 в 05:28

2 ответа

Лучший ответ

getCurrentPosition() является асинхронным. Вероятно, он не будет заполнен до отправки вашей формы, поэтому значения полей не заполняются.

Один из способов решения этой проблемы - не отправлять форму до тех пор, пока getCurrentPosition() не завершит работу и не вызовет showPosition(). Для этого вам необходимо заблокировать отправку формы по умолчанию, вернув false из get_location() и вернув это возвращаемое значение в обработчик onclick, а затем программно отправив форму при вызове showPosition() после скрытые поля местоположения были установлены.

Другой способ решить эту проблему - заполнить текущую позицию, когда форма первоначально отображается, и не ждать, пока вы не попытаетесь отправить ее.

К вашему сведению, смотрите Uncaught ReferenceError: для кого-то lat не определен еще с той же проблемой сегодня с асинхронной природой getCurrentPosition().

1
Community 23 Май 2017 в 12:27

Исключение вызова функции с помощью кнопки отправки и использование следующего сработало нормально.

    <script>
    window.onload=get_location ;
    </script>
</body>
0
madman2890 30 Янв 2013 в 05:51