を得るのを待つ私は次のユースケースの正しいジオロケーションAPIの使用法であるのだろうか。ジオロケーションAPI - 位置
私は何らかの形で(携帯電話を対象)のウェブサイトを持っています。ユーザーは何らかのテキストを入力して[Submit]を押します。入力したデータと一緒にユーザーの場所(GPS座標)を記録する必要があります。ユーザーが許可を得ていないか、自分の位置を特定できなかった場合は、警告メッセージが表示されます。
私の観点からは、ジオロケーションAPIが非同期であるという問題があります。したがって、「Submit」を押すと、実行フローは、送信後に通常どおりに動作するメインフローに分離されます。データはデータベースに記録され、非同期フローコールバックはAPIが座標を受け取ったときにのみ実行されます。
function recordPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
//perform POST query to the server to write coordinates to the database
}
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(recordPosition);
} else {
alert("Geolocation is not supported by this browser.");
}
}
しかし、このアプローチは、データの記録や位置の記録を分離して、私はワット\ O位置のセーブデータを禁止することはできません:。をonSubmit実行に追加したカスタムのgetLocation JS機能 - 私はいくつかの回避策を実施してきた瞬間のために
私が非同期で初心者になるとすぐに、私はGetCurrentPosition関数のシンクロナイズ版を持っていますが、理想的には間違った解決策に見えます。しかし、この場合、私は何をすべきですか?
あなたのような何かを行うことができます。しかし、あなたは問題を抱えていないようです(あなたの例は基本的に私が最初に書いたのと同じですから) - 私はデータを持ったフォームを持っていて、座標を持ち、それらをフォームからのデータに関連付けたいと思っています。私はそれらを分離したくない、私はそれらを互いに結合する必要があります。 –
あなたは私の言葉を完全に忘れたかもしれないと思います。 POSTを2度試してはいけません。最初のPOSTをブロックした私の更新された答えをチェックしてから、位置とPOSTを再度待ちます。 –
はい、更新されたバージョンは良いです、数時間前に私は同じアプローチを実装しました。それはまさに私が必要なものです、ありがとう。答えとしてJSFiddleをイラストとして追加すればいいでしょう。しかし実際に私は別の問題に直面していました(おそらくYii固有のCActiveFormですか?) - これを行うと、テキスト入力の値が失われています。ただonSubmit関数でアラートすればイベントが発生します。座標は問題ありませんが、 ( 何か案は? –