Случайные сбои - обогащение веб-формы города и штата с помощью Google Location API - PullRequest
1 голос
/ 30 октября 2019

У меня нет большого опыта в программировании, и я ищу помощь, чтобы выяснить, почему поля веб-формы города и штата не заполняются скриптом API местоположения Google при отправке формы. У нас около 30% отказов, и, похоже, что они не превышают лимиты вызовов API, это не из-за неправильных почтовых индексов. Не могу понять, в чем проблема.

Справочная информация: На наших сайтах есть формы с такими видимыми полями:

  • Имя
  • Электронная почта
  • Почтовый индекс
  • Страна (подборка)

И эти скрытые поля (заполняются вызовом из скрипта на странице):

  • Город
  • Штат

Основной процесс, который мы ищем:

Когда пользователь входит вформа почтового индекса длиной больше или равна 5, а страна не пуста, ПОТОМ вызовите API местоположения Google и заполните поля скрытых форм с указанием города и штата.

Вот сценарии, которые мы используем:

Сценарий, помещенный в заголовок:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>

Место сценария перед тегом конца тела:

<script type='text/javascript' >

$(document).ready(function() {
    // Get city/state only if country has been selected and postal code is at least
    // 5 characters long
    $('#PostalCode,#Country').change(function() {
      var postalCode = $('#PostalCode').val();
      var countryCode = $('#Country option:selected').val();
      if (postalCode.length >= 5 && countryCode !== '') {
        getResponse(postalCode);
      }
    });
})

function getResponse(postalCode) {
  var apiKey = 'OurAPIkeyIshere';
  var baseUrl = `https://maps.googleapis.com/maps/api/geocode/json?&key=`;
  var countryCode = $('#Country option:selected').val();
  var componentFilter = `&components=country:${ countryCode }|postal_code:${ postalCode }&`;
  var date = new Date();
  var dateTime = `&_=${ date.getTime() }`;
  var url = baseUrl + apiKey + componentFilter + dateTime;

  $.support.cors = true;
  $.ajaxSetup({ cache: false });
  $.getJSON(url, function(response) {
    var getStatus = response.status;
    if (getStatus === 'OK') {
      getCityState(response.results[0].address_components);
    }
  });
}

function getCityState(addressComponents) {
  var city, state, nbhd, subLoc = '';
  var hasCity, hasPostalTown, hasSubLoc = false;

  $.each(addressComponents, function(index, addressComponent) {
    var types = addressComponent.types;
    $.each(types, function(index, type) {
      switch(type) {
        case 'postal_town':
          postalTown = addressComponent.long_name;
          hasPostalTown = true;
          break;
        case 'locality':
          city = addressComponent.long_name;
          hasCity = true;
          break;
        case 'sublocality':
          subLoc = addressComponent.long_name;
          hasSubLoc = true;
          break;
        case 'neighborhood':
          nbhd = addressComponent.long_name;
          break;
        case 'administrative_area_level_1':
          state = addressComponent.short_name;
          break;
      }
    });
  });

  // set the city
  if(hasPostalTown) {
    $('#City').val(postalTown);
  } else if(hasCity) {
    $('#City').val(city);
  } else if(hasSubLoc) {
    $('#City').val(subLoc);
  } else {
    $('#City').val(nbhd);
  }

  // set the state
  $('#State').val(state);

  // reset flags
  hasCity = false;
  hasPostalCode = false;
  hasSubLoc = false;
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...