结合使用Javascript和Places Session令牌的Google Places自动完成示例

时间:2019-02-20 01:05:17

标签: javascript autocomplete

我正在尝试让Google地方自动完成功能可用于会话,但是在任何使用它们的地方都找不到示例。每次搜索时,我的API帐单获得10-20或更多点击。我想是每当新字母添加到搜索框中时。 据我了解,会话应将这些分组,以便每次搜索只向我收费一次,而不是每次键入字母收费。 此示例还在注释中指出它使用了自动完成小部件(我已经在其中搜索了信息),并且看起来它应该自动实现会话。

有没有人举一个例子,说明如何使用JavaScript中的会话来进行Google Places自动完成呼叫?还是知道为什么我要为每个字母付费?

我正在使用的示例如下。

$Company=$ExecutionContext.InvokeCommand.ExpandString($ConfigFile.config.Company)

1 个答案:

答案 0 :(得分:0)

据我了解,您必须将sessionId放入src参考。 像这样:

<script src="https://maps.googleapis.com/maps/api/js?key=#########MY_API_KEY##############&sessiontoken=####&libraries=places&callback=initAutocomplete"
    async defer></script>

注意,我在api键之后添加了&sessiontoken = ####

Google建议使用UUID作为会话令牌。 以下是从此处获取UUID的函数:GooglePlaces Autocomplete

var UUID = (function() {
  var self = {};
  var lut = [];
  for (var i=0; i<256; i++) { lut[i] = (i<16?'0':'')+(i).toString(16); }
  self.generate = function() {
      var d0 = Math.random()*0xffffffff|0;
      var d1 = Math.random()*0xffffffff|0;
      var d2 = Math.random()*0xffffffff|0;
      var d3 = Math.random()*0xffffffff|0;
      return lut[d0&0xff]+lut[d0>>8&0xff]+lut[d0>>16&0xff]+lut[d0>>24&0xff]+'-'+
        lut[d1&0xff]+lut[d1>>8&0xff]+'-'+lut[d1>>16&0x0f|0x40]+lut[d1>>24&0xff]+'-'+
        lut[d2&0x3f|0x80]+lut[d2>>8&0xff]+'-'+lut[d2>>16&0xff]+lut[d2>>24&0xff]+
        lut[d3&0xff]+lut[d3>>8&0xff]+lut[d3>>16&0xff]+lut[d3>>24&0xff];
  }
  return self;
})();

Google还有一个util端点,应该为您提供会话令牌:require('@ google / maps')。util.placesAutoCompleteSessionToken()