为什么地理编码没有返回"无效的地址"何时应用组件限制?

时间:2017-08-13 14:53:49

标签: javascript google-maps google-maps-api-3 geocode

所以我使用Google Map APIv3的地理编码服务。我限制搜索瑞士/ CH'。

但是当我输入像!x这样的无效字符时!或xz等,我没有得到“无效的地址”#39;相反,我得到了瑞士'结果是address_components数组,但它返回“无效地址”#39;如果没有适用国家限制。

但我想要国家/地区限制并返回错误结果,如果用户输入的内容无效。请参阅下面的“我的代码”。

我的代码:

    function placeSearchBox() {
        var searchBoxText = document.getElementById('locationSearch').value;
        console.log('placeboxText',searchBoxText);
        if (searchBoxText.length > 0) {
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode({
                address: searchBoxText,
                componentRestrictions: {
                    country: 'CH'
                }
            }, function (data, status) {
                console.log(data);
                if (status === google.maps.GeocoderStatus.OK && data.length > 0) {
                    searchResultOfGmapObj = data[0];
                    dispalySearchResult(data[0]);
                    console.log('GeoCodedAddress',data[0]);                                                        
                    vm.site.SiteAddress = searchBoxText;
                } else alert("Invalid address");
            });
        }
    }

那为什么不返回无效地址或错误状态?

1 个答案:

答案 0 :(得分:0)

作为解决这个问题的解决方法我做了以下,但如果有人能说出这个问题的原因和不同的解决方案请分享。

function placeSearchBox() {
        var searchBoxText = document.getElementById('location-search').value;
        console.log('placeboxText',searchBoxText);
        if (searchBoxText.length > 0) {
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode({
                address: searchBoxText,
                componentRestrictions: {
                    country: 'CH'
                }
            }, function (data, status) {
                console.log(data,status,searchBoxText);
                if (status === google.maps.GeocoderStatus.OK && data.length > 0) {
                    searchResultOfGmapObj = data[0];
                    var searchText = searchBoxText.toLowerCase();
                    if(searchText != 'switzerland' && searchResultOfGmapObj.address_components.length == 1 && searchResultOfGmapObj.address_components[0].long_name == 'Switzerland'){
                        alert("Invalid address");
                    }else{    
                        dispalySearchResult(data[0]);
                        console.log('GeoCodedAddress',data[0]);                                                        
                        vm.site.SiteAddress = searchBoxText;
                    }
                }
            });
        }
    }

所以我只添加了以下代码块,

var searchText = searchBoxText.toLowerCase();
if(searchText != 'switzerland' && searchResultOfGmapObj.address_components.length == 1 && searchResultOfGmapObj.address_components[0].long_name == 'Switzerland'){
                    alert("Invalid address");
}