У меня нет большого опыта в программировании, и я ищу помощь, чтобы выяснить, почему поля веб-формы города и штата не заполняются скриптом 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>