您可以使用 Google 的 geolocation API 根据用户的 IP 地址获取 lat 和 lon:
var apiKey = "Your Google API Key";
function findLatLonFromIP() {
return new Promise((resolve, reject) => {
$.ajax({
url: `https://www.googleapis.com/geolocation/v1/geolocate?key=${apiKey}`,
type: 'POST',
data: JSON.stringify({considerIp: true}),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: (data) => {
if (data && data.location) {
resolve({lat: data.location.lat, lng: data.location.lng});
} else {
reject('No location object in geolocate API response.');
}
},
error: (err) => {
reject(err);
},
});
});
}
然后,您可以使用这些坐标来使用地理编码 API 获取用户的地址。这是一个返回国家/地区的示例:
function getCountryCodeFromLatLng(lat, lng) {
return new Promise((resolve, reject) => {
$.ajax({
url: `https://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&key=${apiKey}`,
type: 'GET',
data: JSON.stringify({considerIp: true}),
dataType: 'json',
success: (data) => {
console.log('reverse geocode:', data.results[0].address_components);
data.results.some((address) => {
address.address_components.some((component) => {
if (component.types.includes('country')) {
return resolve(component.short_name);
}
});
});
reject('Country not found in location information.');
},
error: (err) => {
reject(err);
},
});
});
}
上面,只需浏览一下data.results
即可找到您需要的信息(City、Street、Country 等) 将上面的这两个功能一起使用:
findLatLonFromIP().then((latlng) => {
return getCountryCodeFromLatLng(latlng.lat, latlng.lng);
}).then((countryCode) => {
console.log('User\'s country Code:', countryCode);
});