2014-06-14 55 views
7

我使用的是Google Maps Places Autocomplete api。谷歌地圖地方自動完成加載事件

我想在顯示自動完成下拉列表之前在搜索過程中顯示一個Ajax微調器。

如何確定地點結果何時準備好?有沒有發生一些事件?

這對於糟糕的互聯網連接特別有用,因爲延遲有時可能高達5秒。用戶需要知道搜索框是一個自動完成的輸入框,然後瘋狂地按下回車進行搜索。

+0

您是否試過編寫自己的控件而不是自動完成只使用geocoder服務?在關鍵時刻(比如在一秒鐘之後做一個地理編碼,顯示你的微調,然後在地理編碼上完全隱藏微調,並顯示一個結果選項列表。) –

+0

@loanburger我嘗試過,自動完成它有點精簡,因爲只有一個http如果你使用api的google已經公開,那麼只需要一次調用就可以複製api提供的內容(包括你選擇的座標和信息),Google也不會阻止你的請求儘可能多的。 – Akshat

+0

嘿,按回車搜索也是一種有效的操作,如果谷歌地圖讓我們這樣做,爲什麼你不應該讓你的用戶這樣做呢?看看這個演示,它也是這樣:https:// google -developers.appspot.com/maps/documentation/utils/geocoder/ – miguev

回答

2

您可以使用自動完成服務來獲取查詢預測。它有一個回調函數。

以您提供的鏈接爲例,您可以在腳本中聲明輸入作爲全局變量。並與自動完成服務訪問它後初始化功能:

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; 
    } 
} 

對於HTML文件中的變化:

<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> 

我會跑這個只有一秒鐘的超時(即如果用戶的互聯網連接速度慢),否則微調看起來像一個潛意識圖像。