我正在使用maxmind的geoip脚本,以便在访问者访问我的网站时调出访问者的个人城市和州名称。这就是我所做的。
我的标题中有这个:
<script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script>
然后,在我的<body>
标记下,我有以下内容:
<script language="JavaScript">
var country=geoip_country();
var region=geoip_region();
var city=geoip_city();
if(country=="")
country="US";
if(region=="")
region="New York";
if(city=="")
city="New York";
</script>
然后,为了显示访客的城市,我把它放在:
<script language="JavaScript">document.write(city);</script>
但是,当我将上面的内容直接放在我的网站上时,它会显示 undefined ,无论城市应该出现在哪里。它与我拥有的其他JavaScript一起做到这一点,我想知道我做错了什么......
感谢您的任何见解。 :)
答案 0 :(得分:3)
问题在于这一行:
var country=geoip_country();
当第一个脚本块的执行命中该行时,它会崩溃,因为没有geoip_country();
这样的函数,这意味着该块中没有后续行被执行,所以调用geoip_city()
和{{ 1}}根本不会发生。
(但由于JavaScript的“提升”机制,geoip_region()
变量本身仍然存在,因此可以从第二个脚本块访问它,但仍然具有默认值city
。)
您需要将该行更改为:
undefined
或者,根据您的需要,:
var country=geoip_country_name();
更正错误后,脚本的其余部分应按预期运行,包括获取城市。
答案 1 :(得分:1)
语句可能在DOM准备好之前执行,document.write(city);你可以把它放在功能中并调用身体负荷。您可以将脚本标记放在Head中,也可以放在关闭body标记之前。
您可以将城市分配给某个span或div或任何html控件,而不是使用document.write()。
<body onload="myFun();" >........
<div id="city" ></div>
<script language="JavaScript">
function myFun()
{
// document.write(city);
document.getElementById('city').innertText = city;
}
</script>
答案 2 :(得分:1)
对于链接资源,我认为您需要指定类型,而不是语言:
<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>
编辑:根据评论,是的,写入指定的输出区域会更好:
<div id="OutputDiv">No output yet.</div>
您也可能希望将默认设置放入window.onload
函数,而不是立即运行:
window.onload = function() {
//Your code here
var country=geoip_country();
var region=geoip_region();
var city=geoip_city();
if(country=="")
country="US";
if(region=="")
region="New York";
if(city=="")
city="New York";
//document.write(city);
var outputDiv = document.getElementById('OutputDiv');
outputDiv.innerHTML = "City is " + city;
};
这也可以让您确定在设置(或应该是)变量后运行输出。