Jadi saya memiliki JS yang cukup sederhana menggunakan jammy navigator.geolocation.getCurrentPosition.
$(document).ready(function(){
$("#business-locate, #people-locate").click(function() {
navigator.geolocation.getCurrentPosition(foundLocation, noLocation);
});
navigator.geolocation.getCurrentPosition(foundLocation, noLocation);
function foundLocation(position) {
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var userLocation = lat + ', ' + lon;
$("#business-current-location, #people-current-location").remove();
$("#Near-Me")
.watermark("Current Location")
.after("<input type='hidden' name='business-current-location' id='business-current-location' value='"+userLocation+"' />");
$("#people-Near-Me")
.watermark("Current Location")
.after("<input type='hidden' name='people-current-location' id='people-current-location' value='"+userLocation+"' />");
}
function noLocation() {
$("#Near-Me").watermark("Could not find location");
$("#people-Near-Me").watermark("Could not find location");
}
})//end DocReady
Pada dasarnya apa yang terjadi di sini adalah kita mendapatkan posisi saat ini, jika diperoleh, dua "tanda air" ditempatkan di dua bidang yang mengatakan "Posisi Saat Ini" dan dua bidang tersembunyi dibuat dengan data lat-panjang sebagai nilainya (mereka dihapus di awal sehingga mereka tidak terduplikasi setiap waktu). Ada juga dua tombol yang memiliki fungsi klik yang terikat padanya yang melakukan hal yang sama. Sayangnya, setiap sekitar tiga kali, ini berhasil. Apa masalahnya di sini ???
javascript
jquery
geolocation
theassociatedweb
sumber
sumber
noLocation
fungsinya dipanggil? Jika demikian, Anda dapat menambahkanerror
parameter kenoLocation()
dan kemudianerror.code
danerror.message
dapat membantu Anda dalam debugging. Mungkin juga membantu kami untuk mengetahui browser apa yang Anda gunakan dan jika Anda melihat masalah yang sama di browser yang berbeda.Jawaban:
Saya telah mengalami masalah yang persis sama, dan hampir tidak ada informasi online tentang hal itu. Tidak ada sama sekali dalam buku. Akhirnya saya menemukan permintaan sederhana ini di stackoverflow dan (ha!) Itu adalah dorongan terakhir yang saya perlukan untuk membuat akun di sini.
Dan saya punya jawaban parsial, tetapi sayangnya tidak lengkap.
Pertama-tama, sadari bahwa batas waktu default untuk getCurrentPosition tidak terbatas (!). Itu berarti penangan kesalahan Anda tidak akan pernah dipanggil jika getCurrentPosition hang di suatu tempat di bagian belakang.
Untuk memastikan Anda mendapatkan batas waktu, tambahkan parameter ketiga opsional ke panggilan Anda ke getCurrentPosition, misalnya, jika Anda ingin pengguna menunggu tidak lebih dari 10 detik sebelum memberi mereka petunjuk tentang apa yang terjadi, gunakan:
Kedua, saya telah mengalami keandalan yang sangat berbeda dalam konteks yang berbeda. Di sini di rumah, saya mendapat panggilan balik dalam satu atau dua detik, meskipun akurasinya buruk.
Namun di tempat kerja, saya mengalami variasi perilaku yang cukup aneh: Geolokasi bekerja di beberapa komputer sepanjang waktu (kecuali IE, tentu saja), yang lain hanya bekerja di chrome dan safari tetapi tidak firefox (masalah tokek?), Yang lain berfungsi satu kali, lalu selanjutnya gagal - dan polanya berubah dari jam ke jam, dari hari ke hari. Terkadang Anda memiliki komputer yang 'beruntung', terkadang tidak. Mungkin menyembelih kambing di bulan purnama akan membantu?
Saya belum dapat memahami hal ini, tetapi saya menduga bahwa infrastruktur back end lebih tidak merata daripada yang diiklankan di berbagai buku dan situs web gung-ho yang mendorong fitur ini. Saya benar-benar berharap bahwa mereka akan sedikit lebih lurus tentang betapa serpihan fitur ini, dan betapa pentingnya pengaturan batas waktu itu, jika Anda ingin penangan kesalahan Anda berfungsi dengan baik .
Saya telah mencoba untuk mengajarkan hal ini kepada siswa hari ini, dan memiliki situasi yang memalukan di mana komputer saya sendiri (pada proyektor dan beberapa layar besar) gagal diam-diam, sedangkan sekitar 80% siswa mendapatkan hasil hampir secara instan (menggunakan jaringan nirkabel yang sama persis). Sangat sulit untuk menyelesaikan masalah ini ketika siswa saya juga membuat kesalahan ketik dan gangguan lainnya, dan ketika komputer saya sendiri juga gagal.
Bagaimanapun, saya harap ini membantu beberapa dari kalian. Terima kasih untuk cek kewarasannya!
sumber
timeout
pilihangetCurrentPosition()
sebenarnya waktu. Ini tidak mengatur waktu pengguna untuk mengizinkan atau menolak permintaan geolokasi, tetapi berapa lama jaringan diizinkan untuk mengembalikan lokasi begitu izin diberikan. Jika pengguna tidak menjawab permintaan geolokasi, penangan kesalahan tidak akan pernah dipanggil. Dengan demikian, Anda memerlukan batas waktu kedua seperti pada jawaban @ xiaohouzi79.Ini adalah cara peretasan yang saya lakukan, setidaknya ini bekerja di semua browser saat ini (di Windows, saya tidak memiliki Mac):
Ini juga akan berfungsi jika seseorang mengklik tutup atau memilih tidak atau memilih opsi Jangan Bagikan di Firefox.
Kikuk, tapi berhasil.
sumber
geolocFail();
penangan kesalahan dangetcodeLatLng();
geo coder.Ini bekerja untuk saya setiap saat:
Padahal itu tidak terlalu akurat. Yang lucu adalah bahwa pada perangkat yang sama jika saya menjalankannya, ini membuat saya berhenti sekitar 100 meter (setiap kali), tetapi jika saya pergi ke peta google, ia menemukan lokasi saya dengan tepat. Jadi walaupun saya pikir mengaktifkanHighAccuracy: true membantu untuk bekerja secara konsisten, sepertinya tidak membuatnya lebih akurat ...
sumber
Ini sudah merupakan pertanyaan lama, tetapi semua jawaban tidak menyelesaikan masalah saya, jadi mari kita tambahkan yang akhirnya saya temukan. Baunya seperti retas (dan itu satu), tetapi berfungsi selalu dalam situasi saya. Berharap dalam situasi Anda juga.
sumber
Sama di sini orang, ini berfungsi dengan baik di Chrome (stabil, dev, dan kenari) tidak hanya di FF dan Safari. Ini juga berfungsi sempurna di iPhone dan iPad saya (Safari!). Ini mungkin karena kebaruan relatif dari fitur ini (yaitu bug). Saya menghabiskan hampir satu minggu untuk ini sekarang dan saya tidak bisa membuatnya bekerja di browser tersebut
Inilah yang saya temukan:
Pertama kali Anda memanggil getCurrentPosition berfungsi dengan sempurna. Setiap panggilan berikutnya tidak pernah kembali, artinya tidak mengaktifkan fungsi successCallback atau errorCallback. Saya menambahkan beberapa opsi posisi ke panggilan saya untuk membuktikan maksud saya:
dan waktu habis setiap kali (setelah panggilan pertama yang berhasil). Saya pikir saya bisa memperbaikinya dengan maksimumAge, tetapi itu tampaknya tidak berfungsi karena seharusnya berfungsi baik:
ini seharusnya mencegah sebenarnya memanggil fungsi getCurrentPosition jika Anda memanggilnya dalam waktu 60 detik, tetapi mengabaikan ini (namun, ini bisa disebabkan karena saya benar-benar menyegarkan halaman saya untuk memicu panggilan kedua, tidak yakin apakah ini persisten dengan panggilan)
btw, bahkan contoh google gagal pada browser ini yang membuat saya percaya bahwa ini memang bug browser, coba, muat dua kali di Safari dan itu tidak akan bekerja untuk yang kedua kalinya.
Jika ada yang menemukan solusi untuk ini, TOLONG beritahu saya :-)
Bersulang.
sumber
Anda tidak mendapatkan pesan kesalahan karena tidak memiliki batas waktu secara default (Setidaknya saya pikir). Saya memiliki masalah yang sama dengan firefox hanya untuk saya firefox selalu memberikan batas waktu. Anda dapat mengatur batas waktu sendiri seperti ini.
Fungsi saya berfungsi dengan baik di chrome tetapi saya mendapatkan waktu habis setiap kali di firefox.
Saya sarankan untuk memperhatikan kesalahan Anda dengan cermat. Diharapkan untuk semuanya. Miliki rencana cadangan untuk semuanya. Saya menggunakan beberapa nilai atau nilai default dari database saya sendiri jika geolokasi google dan geolokasi navigator gagal.
sumber
Saya masih mendapatkan hasil yang buruk di tahun 2017, dan saya punya teori: dokumentasi API mengatakan bahwa panggilan sekarang hanya tersedia "dalam konteks yang aman", yaitu melalui HTTPS. Saya mengalami kesulitan mendapatkan hasil di lingkungan pengembangan saya (http di localhost) dan saya percaya ini sebabnya.
sumber
Saya akan memposting ini di sini jika berguna bagi siapa pun ...
Di iOS Safari, panggilan ke
navigator.geolocation.getCurrentPosition
akan habis jika sayanavigator.geolocation.watchPosition
menjalankan fungsi aktif .Memulai dan menghentikan penggunaan
watchPosition
dengan benarclearWatch()
seperti yang dijelaskan di sini, berhasil: https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/watchPositionsumber
di sini adalah solusi saya berkat penutupan:
sumber
navigator && navigator.geolocation
Jadi saya mengalami hal yang sama. Saya mencoba solusi batas waktu yang berhasil tetapi tidak andal. Saya menemukan bahwa jika Anda hanya memanggilnya dua kali, lokasi di-refresh dengan benar
ini tentu saja sedikit lebih lambat tetapi saya belum pernah memberi saya posisi yang salah sekali. Saya telah mencapai batas waktu beberapa kali dan tidak mengembalikan apa pun selain itu berfungsi dengan baik. Saya tahu ini masih sedikit meretas dan saya menantikan seseorang menemukan solusi nyata.
Atau jika Anda ingin memastikan itu akan terus mencoba sampai Anda ingin menyerah, Anda bisa mencoba sesuatu seperti ini.
Saya mungkin memiliki beberapa kesalahan ketik dan beberapa kesalahan ejaan di sini tapi saya harap Anda mendapatkan ide. Beritahu saya jika ada yang punya pertanyaan atau seseorang menemukan sesuatu yang lebih baik.
sumber
Bagi siapa pun yang bekerja di aplikasi iPhone ...
Jika kode Anda berjalan di UIWebView di iOS 9+, maka Anda harus mengatur
NSLocationWhenInUseUsageDescription
dalam daftar aplikasi Anda.Jika Anda tidak mengaturnya maka
getCurrentPosition
tidak akan pernah menelepon kembali dan pengguna tidak akan pernah diminta.sumber
Saya menemukan, bahwa cara ini tidak berhasil
Tapi
cara ini berfungsi sempurna
sumber
@ brennanyoung jawaban bagus, tetapi jika Anda bertanya-tanya apa yang harus dilakukan dalam kasus kegagalan Anda dapat menggunakan API geolokasi IP seperti https://ipinfo.io (yang merupakan layanan saya). Ini sebuah contoh:
Lihat https://ipinfo.io/developers/replacing-getcurrentposition untuk lebih jelasnya.
sumber
Saya telah mengalami masalah serupa, dan telah mencari kemungkinan bahwa browser memiliki batasan seberapa sering getCurrentPosition dapat dipanggil. Sepertinya saya sering mendapatkan lokasi, tetapi jika saya langsung menyegarkan halaman, waktu akan habis. Jika saya menunggu sebentar, saya biasanya bisa mendapatkan lokasi lagi. Ini biasanya terjadi dengan FF. Di Chrome dan Safari, saya belum melihat waktu getCurrentPosition keluar. Hanya pemikiran saja...
Meskipun saya tidak dapat menemukan dokumentasi untuk mendukung ini, itu adalah kesimpulan yang saya dapatkan setelah banyak pengujian. Mungkin orang lain punya info tentang itu?
sumber
Saya akhirnya menemukan versi yang berfungsi untuk firefox, chrome & navigator default di android (hanya 4.2 yang diuji):
sumber
Parameter kedua yang diteruskan
Geolocation.getCurrentPosition()
adalah fungsi yang ingin Anda tangani kesalahan geolokasi. Fungsi pengendali kesalahan itu sendiri menerimaPositionError
objek dengan detail tentang mengapa upaya geolokasi gagal. Saya sarankan mengeluarkan kesalahan ke konsol jika Anda memiliki masalah:Melakukan hal ini dalam kode saya mengungkapkan pesan "Penyedia lokasi jaringan di ' https://www.googleapis.com/ ': Returned error code 400". Ternyata Google Chrome menggunakan Google API untuk mendapatkan lokasi di perangkat yang tidak memiliki GPS bawaan (misalnya, sebagian besar komputer desktop). Google mengembalikan perkiraan lintang / bujur berdasarkan alamat IP pengguna. Namun , di build pengembang Chrome (seperti Chromium di Ubuntu) tidak ada kunci akses API yang disertakan dalam build browser. Ini menyebabkan permintaan API gagal secara diam-diam. Lihat Chromium Issue 179686: Geolokasi yang memberikan 403 kesalahan untuk detailnya.
sumber
Saya memiliki masalah ini di Mozilla. Semua waktu: Kesalahan: Kesalahan saat mendapatkan posisi .
Sekarang saya menggunakan 47 Mozilla. Saya sudah mencoba segalanya, tetapi sepanjang waktu masalah ini. TAPI kemudian saya buka tentang: config di bilah alamat saya, buka geo.wifi.ui dan ubah nilainya menjadi " https://location.services.mozilla.com/v1/geolocate?key=test ". bekerja!
Jika Anda memiliki kesalahan batas waktu Pengambilan posisi , cobalah untuk meningkatkan nilai batas waktu:
sumber
Mungkin ide yang baik untuk menggunakan layanan lokasi geografis alamat IP sebagai metode mundur ketika
getCurrentPosition
gagal. Misalnya dengan api kami https://ip-api.iosumber
Dalam kasus kami selalu berfungsi pertama kali tetapi menjalankan kembali fungsi lebih dari 3-4 kali, gagal.
Solusi sederhana: Simpan nilainya di LocalStorage.
Sebelum:
Setelah:
sumber
Saya memperhatikan masalah ini baru-baru ini sendiri, dan saya tidak yakin bagaimana masalah itu muncul tetapi kadang-kadang firefox terjebak pada sesuatu yang dimuat dalam cache. Setelah mengosongkan cache dan me-restart firefox tampaknya berfungsi lagi.
sumber
Pustaka ini menambahkan opsi Akurasi dan maxWait yang dikehendaki untuk panggilan geolokasi, yang berarti akan terus berusaha mendapatkan posisi sampai keakuratannya dalam kisaran yang ditentukan.
sumber
Terima kasih kepada semua orang atas masukan mereka, ini membantu saya.
Selain harus menggunakan watchPosition () alih-alih getCurrentPosition (), saya juga menemukan bahwa saya perlu memindahkan panggilan dari dalam document.ready () ke kepala.
sumber
Ini terjadi pada saya ketika menggunakan mode desain responsif Firefox. Telah ada laporan bug yang diajukan. Untuk saat ini, jangan gunakan mode desain responsif saat menggunakan Geolokasi API.
sumber
Mungkin itu membantu seseorang, Di Android saya punya masalah yang sama tetapi saya mengetahuinya dengan menggunakan
setTimeout
di dalamdocument.ready
jadi itu bekerja untuk saya kedua Anda harus meningkatkan batas waktu hanya memetikan jika pengguna mengizinkan lokasinya setelah beberapa detik, jadi saya menyimpannya ke 60000 mili detik (1 menit) memungkinkan fungsi kesuksesan saya untuk memanggil jika pengguna mengklik tombol allow dalam 1 menit.sumber