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. :) :)

0
king 10 Okt. 2012 im 10:25

3 Antworten

Beste Antwort

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/

3
nnnnnn 10 Okt. 2012 im 06:55

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>
1
Adil 10 Okt. 2012 im 06:47

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).

1
Brendan Moore 10 Okt. 2012 im 17:53