从同一表单提交中访问 Python 和 JavaScript 代码

Access Python and JavaScript code from the same form submission

本文关键字:Python JavaScript 代码 访问 表单提交      更新时间:2023-09-26

我正在用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">

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

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

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

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

仅供参考,请参阅未捕获的引用错误:lat 不是为今天因getCurrentPosition()的异步性质而遇到类似问题的其他人定义的。

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

    <script>
    window.onload=get_location ;
    </script>
</body>