Place Autocomplete Data Sessions

This example takes user input and displays a list of place predictions. When a selection is made place details are retrieved and the session is concluded.

Read the documentation .

TypeScript

 let 
  
 titleElement 
 ; 
 let 
  
 resultsContainerElement 
 ; 
 let 
  
 inputElement 
 ; 
 let 
  
 newestRequestId 
  
 = 
  
 0 
 ; 
 // Add an initial request body. 
 const 
  
 request 
  
 = 
  
 { 
  
 input 
 : 
  
 '' 
 , 
  
 locationRestriction 
 : 
  
 { 
  
 west 
 : 
  
 - 
 122.44 
 , 
  
 north 
 : 
  
 37.8 
 , 
  
 east 
 : 
  
 - 
 122.39 
 , 
  
 south 
 : 
  
 37.78 
  
 }, 
  
 origin 
 : 
  
 { 
  
 lat 
 : 
  
 37.7893 
 , 
  
 lng 
 : 
  
 - 
 122.4039 
  
 }, 
  
 includedPrimaryTypes 
 : 
  
 [ 
 'restaurant' 
 ], 
  
 language 
 : 
  
 'en-US' 
 , 
  
 region 
 : 
  
 'us' 
 , 
 }; 
 function 
  
 init 
 () 
  
 { 
  
 titleElement 
  
 = 
  
 document 
 . 
 getElementById 
 ( 
 'title' 
 ); 
  
 resultsContainerElement 
  
 = 
  
 document 
 . 
 getElementById 
 ( 
 'results' 
 ); 
  
 inputElement 
  
 = 
  
 document 
 . 
 querySelector 
 ( 
 'input' 
 ); 
  
 inputElement 
 . 
 addEventListener 
 ( 
 'input' 
 , 
  
 makeAutocompleteRequest 
 ); 
  
 refreshToken 
 ( 
 request 
 ); 
 } 
 async 
  
 function 
  
 makeAutocompleteRequest 
 ( 
 inputEvent 
 ) 
  
 { 
  
 // Reset elements and exit if an empty string is received. 
  
 if 
  
 ( 
 inputEvent 
 . 
 target 
 . 
 value 
  
 == 
  
 '' 
 ) 
  
 { 
  
 titleElement 
 . 
 innerText 
  
 = 
  
 '' 
 ; 
  
 resultsContainerElement 
 . 
 replaceChildren 
 (); 
  
 return 
 ; 
  
 } 
  
 // Add the latest char sequence to the request. 
  
 request 
 . 
 input 
  
 = 
  
 inputEvent 
 . 
 target 
 . 
 value 
 ; 
  
 // To avoid race conditions, store the request ID and compare after the request. 
  
 const 
  
 requestId 
  
 = 
  
 ++ 
 newestRequestId 
 ; 
  
 // Fetch autocomplete suggestions and show them in a list. 
  
 // @ts-ignore 
  
 const 
  
 { 
  
 suggestions 
  
 } 
  
 = 
  
 await 
  
 google 
 . 
 maps 
 . 
 places 
 . 
 AutocompleteSuggestion 
 . 
 fetchAutocompleteSuggestions 
 ( 
 request 
 ); 
  
 // If the request has been superseded by a newer request, do not render the output. 
  
 if 
  
 ( 
 requestId 
  
 !== 
  
 newestRequestId 
 ) 
  
 return 
 ; 
  
 titleElement 
 . 
 innerText 
  
 = 
  
 `Query predictions for " 
 ${ 
 request 
 . 
 input 
 } 
 "` 
 ; 
  
 // Clear the list first. 
  
 resultsContainerElement 
 . 
 replaceChildren 
 (); 
  
 for 
  
 ( 
 const 
  
 suggestion 
  
 of 
  
 suggestions 
 ) 
  
 { 
  
 const 
  
 placePrediction 
  
 = 
  
 suggestion 
 . 
 placePrediction 
 ; 
  
 // Create a link for the place, add an event handler to fetch the place. 
  
 const 
  
 a 
  
 = 
  
 document 
 . 
 createElement 
 ( 
 'a' 
 ); 
  
 a 
 . 
 addEventListener 
 ( 
 'click' 
 , 
  
 () 
  
 = 
>  
 { 
  
 onPlaceSelected 
 ( 
 placePrediction 
 ! 
 . 
 toPlace 
 ()); 
  
 }); 
  
 a 
 . 
 innerText 
  
 = 
  
 placePrediction 
 ! 
 . 
 text 
 . 
 toString 
 (); 
  
 // Create a new list item element. 
  
 const 
  
 li 
  
 = 
  
 document 
 . 
 createElement 
 ( 
 'li' 
 ); 
  
 li 
 . 
 appendChild 
 ( 
 a 
 ); 
  
 resultsContainerElement 
 . 
 appendChild 
 ( 
 li 
 ); 
  
 } 
 } 
 // Event handler for clicking on a suggested place. 
 async 
  
 function 
  
 onPlaceSelected 
 ( 
 place 
 ) 
  
 { 
  
 await 
  
 place 
 . 
 fetchFields 
 ({ 
  
 fields 
 : 
  
 [ 
 'displayName' 
 , 
  
 'formattedAddress' 
 ], 
  
 }); 
  
 const 
  
 placeText 
  
 = 
  
 document 
 . 
 createTextNode 
 ( 
 ` 
 ${ 
 place 
 . 
 displayName 
 } 
 : 
 ${ 
 place 
 . 
 formattedAddress 
 } 
 ` 
 ); 
  
 resultsContainerElement 
 . 
 replaceChildren 
 ( 
 placeText 
 ); 
  
 titleElement 
 . 
 innerText 
  
 = 
  
 'Selected Place:' 
 ; 
  
 inputElement 
 . 
 value 
  
 = 
  
 '' 
 ; 
  
 refreshToken 
 ( 
 request 
 ); 
 } 
 // Helper function to refresh the session token. 
 function 
  
 refreshToken 
 ( 
 request 
 ) 
  
 { 
  
 // Create a new session token and add it to the request. 
  
 request 
 . 
 sessionToken 
  
 = 
  
 new 
  
 google 
 . 
 maps 
 . 
 places 
 . 
 AutocompleteSessionToken 
 (); 
 } 
 declare 
  
 global 
  
 { 
  
 interface 
  
 Window 
  
 { 
  
 init 
 : 
  
 () 
  
 = 
>  
 void 
 ; 
  
 } 
  
 } 
  
 window 
 . 
 init 
  
 = 
  
 init 
 ; 
  

JavaScript

 let 
  
 titleElement 
 ; 
 let 
  
 resultsContainerElement 
 ; 
 let 
  
 inputElement 
 ; 
 let 
  
 newestRequestId 
  
 = 
  
 0 
 ; 
 // Add an initial request body. 
 const 
  
 request 
  
 = 
  
 { 
  
 input 
 : 
  
 '' 
 , 
  
 locationRestriction 
 : 
  
 { 
  
 west 
 : 
  
 - 
 122.44 
 , 
  
 north 
 : 
  
 37.8 
 , 
  
 east 
 : 
  
 - 
 122.39 
 , 
  
 south 
 : 
  
 37.78 
  
 }, 
  
 origin 
 : 
  
 { 
  
 lat 
 : 
  
 37.7893 
 , 
  
 lng 
 : 
  
 - 
 122.4039 
  
 }, 
  
 includedPrimaryTypes 
 : 
  
 [ 
 'restaurant' 
 ], 
  
 language 
 : 
  
 'en-US' 
 , 
  
 region 
 : 
  
 'us' 
 , 
 }; 
 function 
  
 init 
 () 
  
 { 
  
 titleElement 
  
 = 
  
 document 
 . 
 getElementById 
 ( 
 'title' 
 ); 
  
 resultsContainerElement 
  
 = 
  
 document 
 . 
 getElementById 
 ( 
 'results' 
 ); 
  
 inputElement 
  
 = 
  
 document 
 . 
 querySelector 
 ( 
 'input' 
 ); 
  
 inputElement 
 . 
 addEventListener 
 ( 
 'input' 
 , 
  
 makeAutocompleteRequest 
 ); 
  
 refreshToken 
 ( 
 request 
 ); 
 } 
 async 
  
 function 
  
 makeAutocompleteRequest 
 ( 
 inputEvent 
 ) 
  
 { 
  
 // Reset elements and exit if an empty string is received. 
  
 if 
  
 ( 
 inputEvent 
 . 
 target 
 . 
 value 
  
 == 
  
 '' 
 ) 
  
 { 
  
 titleElement 
 . 
 innerText 
  
 = 
  
 '' 
 ; 
  
 resultsContainerElement 
 . 
 replaceChildren 
 (); 
  
 return 
 ; 
  
 } 
  
 // Add the latest char sequence to the request. 
  
 request 
 . 
 input 
  
 = 
  
 inputEvent 
 . 
 target 
 . 
 value 
 ; 
  
 // To avoid race conditions, store the request ID and compare after the request. 
  
 const 
  
 requestId 
  
 = 
  
 ++ 
 newestRequestId 
 ; 
  
 // Fetch autocomplete suggestions and show them in a list. 
  
 // @ts-ignore 
  
 const 
  
 { 
  
 suggestions 
  
 } 
  
 = 
  
 await 
  
 google 
 . 
 maps 
 . 
 places 
 . 
 AutocompleteSuggestion 
 . 
 fetchAutocompleteSuggestions 
 ( 
 request 
 ); 
  
 // If the request has been superseded by a newer request, do not render the output. 
  
 if 
  
 ( 
 requestId 
  
 !== 
  
 newestRequestId 
 ) 
  
 return 
 ; 
  
 titleElement 
 . 
 innerText 
  
 = 
  
 `Query predictions for " 
 ${ 
 request 
 . 
 input 
 } 
 "` 
 ; 
  
 // Clear the list first. 
  
 resultsContainerElement 
 . 
 replaceChildren 
 (); 
  
 for 
  
 ( 
 const 
  
 suggestion 
  
 of 
  
 suggestions 
 ) 
  
 { 
  
 const 
  
 placePrediction 
  
 = 
  
 suggestion 
 . 
 placePrediction 
 ; 
  
 // Create a link for the place, add an event handler to fetch the place. 
  
 const 
  
 a 
  
 = 
  
 document 
 . 
 createElement 
 ( 
 'a' 
 ); 
  
 a 
 . 
 addEventListener 
 ( 
 'click' 
 , 
  
 () 
  
 = 
>  
 { 
  
 onPlaceSelected 
 ( 
 placePrediction 
 . 
 toPlace 
 ()); 
  
 }); 
  
 a 
 . 
 innerText 
  
 = 
  
 placePrediction 
 . 
 text 
 . 
 toString 
 (); 
  
 // Create a new list item element. 
  
 const 
  
 li 
  
 = 
  
 document 
 . 
 createElement 
 ( 
 'li' 
 ); 
  
 li 
 . 
 appendChild 
 ( 
 a 
 ); 
  
 resultsContainerElement 
 . 
 appendChild 
 ( 
 li 
 ); 
  
 } 
 } 
 // Event handler for clicking on a suggested place. 
 async 
  
 function 
  
 onPlaceSelected 
 ( 
 place 
 ) 
  
 { 
  
 await 
  
 place 
 . 
 fetchFields 
 ({ 
  
 fields 
 : 
  
 [ 
 'displayName' 
 , 
  
 'formattedAddress' 
 ], 
  
 }); 
  
 const 
  
 placeText 
  
 = 
  
 document 
 . 
 createTextNode 
 ( 
 ` 
 ${ 
 place 
 . 
 displayName 
 } 
 : 
 ${ 
 place 
 . 
 formattedAddress 
 } 
 ` 
 ); 
  
 resultsContainerElement 
 . 
 replaceChildren 
 ( 
 placeText 
 ); 
  
 titleElement 
 . 
 innerText 
  
 = 
  
 'Selected Place:' 
 ; 
  
 inputElement 
 . 
 value 
  
 = 
  
 '' 
 ; 
  
 refreshToken 
 ( 
 request 
 ); 
 } 
 // Helper function to refresh the session token. 
 function 
  
 refreshToken 
 ( 
 request 
 ) 
  
 { 
  
 // Create a new session token and add it to the request. 
  
 request 
 . 
 sessionToken 
  
 = 
  
 new 
  
 google 
 . 
 maps 
 . 
 places 
 . 
 AutocompleteSessionToken 
 (); 
 } 
 window 
 . 
 init 
  
 = 
  
 init 
 ; 
  

CSS

 /* 
 * Always set the map height explicitly to define the size of the div element 
 * that contains the map. 
 */ 
 # 
 map 
  
 { 
  
 height 
 : 
  
 100 
 % 
 ; 
 } 
 /* 
 * Optional: Makes the sample page fill the window. 
 */ 
 html 
 , 
 body 
  
 { 
  
 height 
 : 
  
 100 
 % 
 ; 
  
 margin 
 : 
  
 0 
 ; 
  
 padding 
 : 
  
 0 
 ; 
 } 
 a 
  
 { 
  
 cursor 
 : 
  
 pointer 
 ; 
  
 text-decoration 
 : 
  
 underline 
 ; 
  
 color 
 : 
  
 blue 
 ; 
 } 
 input 
  
 { 
  
 width 
 : 
  
 300 
 px 
 ; 
 } 
  

HTML

<html>
  <head>
    <title>Place Autocomplete Data API Session</title>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <input id="input" type="text" placeholder="Search for a place..." />
    <div id="title"></div>
    <ul id="results"></ul>
    <img
      class="powered-by-google"
      src="https://storage.googleapis.com/geo-devrel-public-buckets/powered_by_google_on_white.png"
      alt="Powered by Google"
    />

    <!-- 
      The `defer` attribute causes the script to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8&callback=init&libraries=places&v=weekly"
      defer
    ></script>
  </body>
</html>  

Try Sample

Clone Sample

Git and Node.js are required to run this sample locally. Follow these instructions to install Node.js and NPM. The following commands clone, install dependencies and start the sample application.

  
  git 
  
 clone 
  
 https 
 : 
 //github.com/googlemaps-samples/js-api-samples.git 
 
  
  cd 
  
 samples 
 / 
 place 
 - 
 autocomplete 
 - 
 data 
 - 
 session 
 
  
  npm 
  
 i 
 
  
  npm 
  
 start 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: