0

Python で Web アプリケーションを作成しています。入力として 2 つのユーザー指定のエントリを受け取るフォームがあります。1 つはテキスト フィールドで、もう 1 つは選択です。送信すると、これらのエントリを GET してデータベースに保存し、後でクエリを実行して投稿します。とにかく、必要なユーザーの座標を取得するには 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()この問題を解決する 1 つの方法は、 が終了して が呼び出されるまでフォームを送信しないことshowPosition()です。これを行うには、onclick ハンドラーで戻り値を返すことでデフォルトのフォーム送信をブロックし、非表示の場所フィールドが設定された後に が呼び出されたときにプログラムでフォームを送信する必要falseがあります。get_location()showPosition()

この問題を解決する別の方法は、フォームが最初に表示されたときに現在の位置に入力し、送信しようとするまで待たないことです。

参考までに、Uncaught ReferenceError: lat is not definedを参照してくださいgetCurrentPosition()

于 2013-01-30T01:31:02.737 に答える
0

送信ボタンから関数呼び出しを削除し、以下を利用するとうまくいきました。

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