googlemaps -- warten bis karte komplett geladen ist
goerdy
- javascript
Hallo,
bin ein ziemliger js Newbee da ich eigentlich nur c++/# progge.
Bin gerade dabei ein System zu programmieren das in einem Auto die aktuellen GPS Koordinaten via umts auf nen Server hochlädt.
Man soll dann einfach auf eine Website gehen können und dort wird in googlemaps dann die Position des Fahrzeugs angezeigt.
die Anzeige soll sich automatisch aktualisieren und da ist mein Problem:
Meine idee war einfach eine Schleife zu machen in der sich die Karte immer wieder mit den neuen Koordinaten neu lädt, damit sich nicht ständig alles ändert im 20 sekunden takt, also habe ich einfach eine timeout Bedingung in die Schleife geschrieben:
do
{
...
setTimeout("karteladen()",15000);
}while(...)
Das Problem ist nur das das timeout das laden der "Bilder" von google auch anzuhalten scheint.
Giebt es eine "wartefunktion" die nicht alles lahmlegt oder alternativ dazu eine Möglichkeit abzufragen ob die gesammte Karte fertig geladen wurde?
Habe das schon mit onload verucht hatte aber keinen Erfolg damit.
Hoffe mir kann Jemand helfen
goerdy
Hi,
bin ein ziemliger js Newbee da ich eigentlich nur c++/# progge.
du tust WAS? Sorry, aber da musste ich einfach mal nachhaken - hier wird die Sprache so oft dermaßen verunstaltet, manchmal so, dass man als Normalsterblicher nicht einmal versteht, was gemeint ist. Das muss doch nicht sein.
do
{
...
setTimeout("karteladen()",15000);
}while(...)
Das Problem ist nur das das timeout das laden der "Bilder" von google auch anzuhalten scheint.
Nein, nicht setTimeout() ist das Problem, sondern der Rest. Offensichtlich hast du die Funktion von setTimeout() missverstanden.
Denn setTimeout(t, anweisung) hält die Ausführung des aktuellen Programmzweigs eben nicht für die Zeit t an, sondern das Programm läuft asynchron weiter. Und nach der Zeit t wird dann die gewünschte Anweisung ausgeführt - vorausgesetzt, die JS-Engine hat dann Zeit dafür und ist nicht mit anderen Programmabläufen beschäftigt.
Das ist ungefähr so, als wenn du gerade so richtig beschäftigt bist, und dann rufst du zwischendurch beim Pizza-Service an, bestellst eine Quattro Stagioni, bitte in einer halben Stunde. Danach machst du weiter mit deiner Arbeit, und wenn alles gut geht, kannst du in einer halben Stunde deine Pizza in Empfang nehmen, wenn du dann Zeit dafür hast.
Giebt es eine "wartefunktion" die nicht alles lahmlegt oder alternativ dazu eine Möglichkeit abzufragen ob die gesammte Karte fertig geladen wurde?
Vielleicht möchtest du dir mal setInterval() ansehen, damit kannst du die ganze Programmlogik, die du immer wieder abspulen willst, in eine Funktion auslagern und diese immer wieder aufrufen. Das geht natürlich auch mit setTimeout(): Den ersten Aufruf deiner Funktion stößt du mit dem onload-Handler an, und wenn die Funktion durch ist, stellt sie mit setTimeout() ihren eigenen Aufruf erneut in die Warteliste.
Aber endlose Schleifen sind für Javascript im Browser "tödlich".
So long,
Martin
Hi,
sorry!
Das heist so viel wie:
Ich bin ein totaler Neuling auf dem Gebiet der JavaScript Programmierung.
Normalerweise schreibe ich Programme in C++ und C#.
Ok, ich habe mich sehr undeutlich ausgedrückt (kein Wunder nach 14 Stunden nonstop programming^^).
Das Problem besteht darin, dass die google API Funktion, die die Karte lädt nicht erst abgearbeitet wird bevor die nächste Funktion angestoßen wird.
So ist es z.B. wenn man nach dem Befehl für das erstellen der Karte eine simple "alert" anweisung schreibt, die Karte nur Teilweise aufgebaut wird und soffort das Alarmfensterchen aufgeht.
Wenn man dann auf [OK] drückt baut sich die Karte weiter auf.
Das bedeutet aber auch, wenn ich nach die Besagte funktion ein Timeout von 15 Sekunden schreibe, das der Kartenaufbau wieder unterbrochen wird.
Und mein Wunsch ist es, das erst wenn die Karte komplett geladen ist die nächste Funktion bzw. der nächste Befehl angestoßen wird.
In der Google Maps API Reference giebt es eine Funktion "isLoadet()" allerdings verstehe ich nicht was diese Funktion macht den sie nimmt keinerlei Einfluss auf den Programm ablauf auser der Tatsache das nach dieser Funktion nichts mehr ausgeführt wird.
Ich hoffe das was ich jetzt geschrieben habe ist verständlicher, und das mir Jemand helfen kann.
liebe Grüße
goerdy
Hallo goerdy
Das bedeutet aber auch, wenn ich nach die Besagte funktion ein Timeout von 15 Sekunden schreibe, das der Kartenaufbau wieder unterbrochen wird.
Wie schreibst du dein Timeout? Etwa so:
do
{
setTimeout("karteladen()",15000);
}while(...)
setTimeout() ist _kein_ wait (das gibt es in Javascript nicht)
Die Schleife rödelt ununterbrochen durch, blockiert damit alles andere und setzt bei jedem Durchlauf wieder neu den Timer auf „in 15 Sekunden die Funktion kartenladen() starten”.
Es müsste eher so aussehen:
function kartenladen()
{
/* alles was getan werden soll */
setTimeout("karteladen()",15000); /* rufe diese Funktion in 15 Sekunden wieder auf */
}
In der Google Maps API Reference giebt es eine Funktion "isLoadet()" allerdings verstehe ich nicht was diese Funktion macht den sie nimmt keinerlei Einfluss auf den Programm ablauf auser der Tatsache das nach dieser Funktion nichts mehr ausgeführt wird.
Meinst du wirklich isLoadet() und nicht eher isLoaded()?
Ob dir diese Funktion aber wirklich weiterhilft oder eher der Event load weiß ich nicht. Laut Google Maps API Reference feuert dieser, wenn alles initialisiert ist, allerdings unabhängig davon, ob die Bilder bereits fertig geladen sind.
Auf Wiederlesen
Detlef