Ich verwende das Geoip-Skript von maxmind, um den Besuchern den Namen einer Stadt und eines Bundesstaates mitzuteilen, wenn sie auf meiner Website ankommen. Das habe ich getan.
Ich habe dies in meinem Header:
<script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script>
Dann habe ich direkt unter meinem <body>
-Tag Folgendes:
<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>
Um zum Beispiel die Stadt des Besuchers zu zeigen, habe ich folgendes gesagt:
<script language="JavaScript">document.write(city);</script>
Wenn ich das direkt oben auf meiner Website platziere, heißt es jedoch undefiniert , wo immer die Stadt auftauchen soll. Es macht das mit anderem Javascript, das ich auch habe und ich frage mich, was ich falsch mache ......
Vielen Dank für alle Einblicke. :) :)
3 Antworten
Das Problem ist diese Zeile:
var country=geoip_country();
Wenn die Ausführung Ihres ersten Skriptblocks auf diese Zeile trifft, stürzt sie ab, da keine Funktion wie geoip_country();
vorhanden ist. Dies bedeutet, dass keine späteren Zeilen in diesem Block ausgeführt werden, sodass die Aufrufe von geoip_city()
und geoip_region()
erfolgen. überhaupt nicht passieren.
(Die Variable city
selbst ist jedoch aufgrund des "Hub" -Mechanismus von JavaScript weiterhin vorhanden, sodass vom zweiten Skriptblock aus auf sie zugegriffen werden kann, der Standardwert jedoch undefined
beträgt.)
Sie müssen diese Zeile ändern in:
var country=geoip_country_name();
Oder je nach Bedarf:
var country=geoip_country_code();
Wenn dieser Fehler behoben ist, sollte der Rest des Skripts wie erwartet ausgeführt werden, einschließlich des Abrufs der Stadt.
Demo: http://jsfiddle.net/2kbeg/
Die Anweisung wird möglicherweise ausgeführt, bevor das DOM bereit ist. Document.write (city); Sie können es in Funktion setzen und die Körperlast aufrufen. Sie können die Skript-Tags in Head oder kurz vor dem schließenden Body-Tag einfügen.
Anstatt document.write () zu verwenden, können Sie die Stadt einem Span oder Div oder einem beliebigen HTML-Steuerelement zuweisen.
<body onload="myFun();" >........
<div id="city" ></div>
<script language="JavaScript">
function myFun()
{
// document.write(city);
document.getElementById('city').innertText = city;
}
</script>
Für verknüpfte Ressourcen müssen Sie meines Erachtens den Typ anstelle der Sprache angeben:
<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>
Bearbeiten: Laut Kommentar ist es besser, in einen bestimmten Ausgabebereich zu schreiben:
<div id="OutputDiv">No output yet.</div>
Möglicherweise möchten Sie Ihre Standardeinstellungen auch in eine window.onload
-Funktion einfügen, anstatt sie sofort auszuführen:
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;
};
Auf diese Weise können Sie auch sicher sein, dass Sie die Ausgabe ausführen, nachdem die Variable festgelegt wurde (oder sein soll).