2014-06-14 22 views
7

Google Maps Places Autocomplete api kullanıyorum.Google haritaları yerler otomatik tamamlama olayları yükleme

Otomatik tamamlama açılır menüsü görüntülenmeden önce arama sırasında bir Ajax döndürücüyü göstermek istiyorum.

Yerlerin ne zaman hazır olduğunu nasıl belirleyebilirim? Bazı olayların kovulması var mı?

Gecikme bazen 5 saniyeye kadar olabileceğinden, bu özellik kötü internet bağlantılarında özellikle yararlıdır. Kullanıcı, arama kutusuna enter tuşuna basmadan önce arama kutusunun otomatik tamamlama giriş kutusu olduğunu bilmelidir.

+0

Otomatik tamamlama yerine kendi denetiminizi yazmayı denediniz mi, yalnızca coğrafi kod hizmetini kullanın? anahtar kelime üzerinde (bir saniye sonra bir geocode yapın, sonra spikerinizi gösterin, daha sonra jeokontrolörde spinner'ı gizleyin ve bazı sonuç seçenekleriyle bir liste gösterin. –

+0

@loanburger Denedim, autocomplete ile sadece 1 sorgu ve seçilen öğe başına çağrı yapılacaktır.Api'nin google'unu kullandıysanız, api'nin sunduğu şeyleri çoğaltmak için tek bir aramadan daha fazlasını gerektirir (seçimlerinizle ilgili koordinatlar ve bilgiler dahil). – Akshat

+0

Hey, Arama için Enter tuşuna basmak da geçerli bir işlemdir, Google Haritalar bunu yapmamıza izin veriyorsa, neden kullanıcılarınızın bunu yapmasına izin vermemelisiniz? Bu demoya bakın, ayrıca şunu da yapın: https: // google -developers.appspot.com/maps/documentation/utils/geocoder/ – miguev

cevap

2

Sorgu tahminlerini almak için otomatik tamamlama servisini kullanabilirsiniz. Bir geri çağırma fonksiyonuna sahiptir.

Sağladığınız bağlantıdan örnekte, komut dosyasında global bir değişken olarak girdisi bildirebilirsiniz. html belgesinde değişikliklere gelince

var input; 
function initialize() { 
    ... 
    input = document.getElementById('pac-input'); 
    ... 
} 

function showSpinner() { 
    document.getElementById('spinner').style.display = 'block'; 

    var service = new google.maps.places.AutocompleteService(); 
    service.getQueryPredictions({ input: input }, callback); 
} 

function callback(predictions, status) { 
    if (status != google.maps.places.PlacesServiceStatus.OK) { 
    document.getElementById('spinner').style.display = 'none'; 
    return; 
    } 
} 

:

<body> 
    <input id="pac-input" class="controls" type="text" 
     placeholder="Enter a location" onkeypress="showSpinner()"> 
    <img id="spinner" src="spinner.gif" style="position:absolute; top:0; right:0; width: 250px; display: none"> 
    </body> 

Bu yalnızca bir saniyelik zaman aşımı aday olacağını Ve sonra otomatik tamamlama hizmeti ile erişim onu ​​ fonksiyonunu başlatmak (yani, kullanıcının internet bağlantısı yavaşsa), aksi halde spinner bilinçaltı bir görüntü gibi görünür.