0

我正在用 Python 编写一个 Web 应用程序。我有一个表单,输入两个用户指定的条目,一个是文本字段,另一个是选择。提交后,我获取这些条目并将它们存储到数据库中,稍后会对其进行查询和发布。无论如何,它需要 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">

仅供参考,这都在同一个表格中。因此,理论上,这应该是生成用户的纬度和经度,然后将这些值传递给他们各自的输入字段。有什么明显的原因这不起作用吗?提前致谢。

4

2 回答 2

1

getCurrentPosition()是异步的。在您提交表单之前它可能尚未完成,因此未填写字段值。

解决该问题的一种方法是在getCurrentPosition()完成并调用showPosition(). 为此,您需要通过在 onclick 处理程序中返回并返回该返回值来阻止默认表单提交,然后在设置隐藏位置字段后以编程方式提交false表单。get_location()showPosition()

解决该问题的另一种方法是在最初显示表单时填写当前位置,而不是等到您尝试提交它。

仅供参考,请参阅Uncaught ReferenceError: lat is not defined for others have a similar problem today with the asynchronous nature of getCurrentPosition().

于 2013-01-30T01:31:02.737 回答
0

从提交按钮中消除函数调用并利用以下方法效果很好。

    <script>
    window.onload=get_location ;
    </script>
</body>
于 2013-01-30T05:51:24.707 回答