前提・実現したいこと
位置情報取得ボタンを押下後に、JavaScriptのgetCurrentPositionメソッドを使って緯度・経度を取得し逆ジオコーディングで住所に変換。
Ajaxを使ってPHP(サーバー)にデータを受け渡したい。
現状、位置情報取得ボタンを押下するとフォームに緯度、経度、住所の情報が表示されるが、PHP側へのデータ受け渡しは出来てない。コンソールを確認すると下記のエラーメッセージが表示される。
分かる方がいればご教示のほどよろしくお願いいたします。
該当のソースコード
HTML
1<div class="wrap page"> 2 <form action="" name="mainForm" method="post" style="float: left"> 3 4 <!-- ページ名(全ページ共通) --> 5 <div class="ttl clearfix inner" id="text-button"> 6 <!-- ページ名 --> 7 <button type="button" name="btnTest" id="get-gps">位置情報取得ボタン</button> 8 9 <textarea id="lat" name="lat"></textarea> 10 <textarea id="lon" name="lon"></textarea> 11 <textarea id="address" name="address"></textarea> 12 13 </div> 14 <!-- main --> 15 </form> 16</div><!-- .wrap end -->
JavaScript
1 var GSI = {}; 2 3 const latEle = document.querySelector('#lat'); // constの中身<textarea id="lat" name="lat"></textarea> 4 const lonEle = document.querySelector('#lon'); 5 const addressEle = document.querySelector('#address'); 6 const gpsButton = document.querySelector('#get-gps'); 7 8 const setGeoLoc = (coords) => { 9 latEle.textContent = `緯度: ${coords.latitude}`; 10 lonEle.textContent = `経度: ${coords.longitude}`; 11 } 12 13 /** 14 * 緯度経度から住所を取得して表示 15 */ 16 const getAddress = async (coords) => { 17 // 逆ジオコーディング API 18 const url = new URL('https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress'); 19 url.searchParams.set('lat', coords.latitude); 20 url.searchParams.set('lon', coords.longitude); 21 const res = await fetch(url.toString()); 22 const json = await res.json(); 23 const data = json.results; 24 25 // 変換表から都道府県などを取得 26 const muniData = GSI.MUNI_ARRAY[json.results.muniCd]; 27 // 都道府県コード,都道府県名,市区町村コード,市区町村名 に分割 28 const [prefCode, pref, muniCode, city] = muniData.split(','); 29 30 // 画面に反映 31 addressEle.textContent = `${pref} ${city} ${data.lv01Nm}`; 32 33}; 34 /** 35 * 位置情報 API の実行(イベントリスナ) 36 */ 37 gpsButton.addEventListener('click', () => { 38 navigator.geolocation.getCurrentPosition( 39 geoLoc => { 40 setGeoLoc(geoLoc.coords); 41 getAddress(geoLoc.coords); 42 }, 43 err => console.error({err}), 44 ); 45 }); 46 47 var btn = document.getElementById('get-gps'); 48 49 btn.addEventListener('click', function() { 50 51 $.ajax({ 52 type: "post", 53 url: "/routine/admin/attendance.php", 54 data: { 'データ': addressEle }, 55 }); 56 //submit()でフォームの内容を送信 57 document.mainForm.submit(); 58 })
エラーメッセージ1
jquery.min.js:5 Uncaught RangeError: Maximum call stack size exceeded at o (jquery.min.js:5:7810) at gn (jquery.min.js:5:8293) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316) at gn (jquery.min.js:5:8316)
エラーメッセージ2
(index):121 GET https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress?lat=35.6488574&lon=139.7422206 net::ERR_INTERNET_DISCONNECTED
エラーメッセージ3
(index):121 Unncaught (in promise) TypeError: Failed to fetch at getAddress ((index):121:23) at navigator.geolocation.getCurrentPosition.console.error.err.err ((index):141:11)
あなたの回答
tips
プレビュー