我在Drupal 7网站上使用Maxmind.Com的GeoIP2(Omni)Web服务,根据访问者的IP提取地理数据。
我可以使用以下代码获得JSON文档:
<script type="text/javascript" src="//js.maxmind.com/js/apis/geoip2/v2.0/geoip2.js">
</script>
<script type="text/javascript">
var onSuccess = function(location){
console.log(
"Lookup successful:nn"
+ JSON.stringify(location.city.names.en, undefined, 4)
);
};
var onError = function(error){
alert(
"Error:nn"
+ JSON.stringify(error, undefined, 4)
);
};
geoip2.omni(onSuccess, onError);
</script>
返回的值之一是访问者的城市名称。如何将返回的值用作查询字符串的一部分?
例如,如果'city.names.en' = 'Detroit'
,我如何使用"Detroit"作为密钥从另一个文档、表格等中检索数据(例如本地电话号码)?
最终目标是根据访问者的位置在"联系我们"部分动态插入一个"本地"电话号码。
通常情况下,您将格式化如下的查询字符串:
http://mydomain.com/route?parameterName=value
例如,它可能看起来像这样:
http://mydomain.com/phoneNumbers/phoneNumber?city=Detroit
有两种方法可以实现您想要做的事情。
- 使用ajax获取城市名称后加载联系人信息。以下是一个示例:
<span id="contact"></span>
<script type="text/javascript">
$(document).ready(function() {
geoip2.omni(function(data) {
$.ajax({
type: "GET",
url: "your/url/to/contact/getter/service",
data: {
city : data.city.names.en
},
success: function(contact) {
// update your contact information
$("#contact").text(contact);
}
}
}, function(data) {
debugger;
});
});
</script>
显然,您需要一个资源,您可以请求该资源提供给定城市名称的联系信息。
- 创建一个联系人信息地图,并使用它获取城市的联系人信息,而无需再次发送请求
<span id="contact"></span>
<script type="text/javascript">
var contactMap = {
NewYork : "123123",
London : "9797987"
}
$(document).ready(function() {
geoip2.omni(function(data) {
// update your contact information
$("#contact").text(contactMap[data.city.names.en]);
}, function(data) {
debugger;
});
});
</script>