ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
469
469
EMPFEHLEN
-
11.01.12 21:12 #1
- Registriert seit
- Nov 2007
- Beiträge
- 26
Hallo zusammen!
Vor paar Tagen habe ich von der Google Maps API Doku Seite, hier, ein Beispiel-Skript geklaut. Dann habe ich den Code auseinandergenommen und umgeschrieben, v.a. um einzelne Teil besser zu verstehen.
Die komplette Date mit HTML hänge ich an.HTML-Code:var address = 'TU-Sportzentrum Dovestraße Berlin'; var geocoder = new google.maps.Geocoder(); var geoLocation = generateLatLng(address); function createMap() { var mapOptions = { zoom: 15, center: generateLatLng(address), mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map(document.getElementById('mapCanvas'), mapOptions); addMarker(); } function addMarker() { var marker = new google.maps.Marker({ map: map, position: generateLatLng(address) }); } function createGoogleMapsLink() { return 'http://maps.google.de/maps?' + 'q=' + address + '&ll=' + generateLatLng(address).lat() + ',' + generateLatLng(address).lng(); } function generateLatLng(address) { geocoder.geocode({'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { geoLocation = results[0].geometry.location; // alert(geoLocation.lat() + ' / ' + geoLocation.lng() + ' ' + status); } else { // alert('Geocode was not successful for the following reason: ' + status); } }); return geoLocation; } function showMap() { var address = jQuery('#address').val(); createMap(); jQuery('#link').attr('href', createGoogleMapsLink()); } jQuery('document').ready(function() { alert('Mit alert geht\'s. Ohne nicht...'); jQuery('#address').val(address); showMap(); }); jQuery('document').ready(function() { jQuery('#address').change(function() { address = jQuery('#address').val(); createMap(); jQuery('#link').attr('href', createGoogleMapsLink()); }); });
Problem: Es funktionert nur, wenn ein Alert geworfen wird. Sonst erscheint im FireBug eni Fehler:
Meine Vermutung ist, dass es ein AJAX-Problem ist, sprich, mit der Asynchronität der Aufrufe zusammenhängt. Kann bitte jemand bei der Lösung helfen? Danke!generateLatLng(address) is undefined
'&ll=' + generateLatLng(address).lat() + ',' + generateLatLng(address).lng();
Grüße,
Ilya
-
12.01.12 13:52 #2
1. Du solltest wissen, dass nicht alle Skripte, die Google da auf seiner API-Seite aufführt, lauffähig sind. Als ich mich eingearbeitet habe, hab ich mir nen Wolf gesucht und dann alles ganz von vorn selbst zusammengebaut. Hatte den Vorteil, dass ich es danach verstanden hatte

2. Diese Zeile hier:
center: generateLatLng(address),
Bei mir ist es Zeile 8.
Nach meinem Verständnis von JavaScript kommt die Variable "address" hier nicht an. Du bist innerhalb einer Funktion.
-
15.01.12 12:59 #3
- Registriert seit
- Nov 2007
- Beiträge
- 26
Danke für Deine Antwort! Nichts ist perfekt und die Google API sind wohl keine Ausnahme, aber diesmal war es mein Fehler. Das Hauptproblem meines Skripts liegt darin, dass es eine Funktion gibt, die von einer asynchronen abhängig ist, jedoch früher ausgeführt wird, als diese asynchrone Funktion ein Ergebnis zurückgegeben hat.
Hier ein vereinfachtes Beispiel mit einer Log-Funktion:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
<script type="text/javascript"> /** Creates an element with id = $elementId, if this has not yet existed. */ function createElement(elementId) { var returnElement; var defaultElementId = 'log'; elementId = elementId != null ? elementId : defaultElementId; var foundElement = jQuery('body').find('#' + elementId); if (foundElement.length != 0) { // alert(foundElement.attr('id') + '***'); returnElement = foundElement; } else { // alert('nothing found'); returnElement = jQuery('<div id="' + elementId +'"><h4>Log</h4></div>'); jQuery('body').prepend(returnElement); } // jQuery('#' + elementId).css({'background' : '#00aa00', 'height' : '100'}); return returnElement; } /** Logs the message $message ind the element with id $elementId. */ function log(message, elementId) { var logElement = createElement(elementId); logElement.append('<div class="logMessage">' + message + '</div>'); } /* Generates a geo location object from an address string $address. */ function generateLatLng(address) { log('start generateLatLng()'); var geocoder = new google.maps.Geocoder(); geocoder.geocode({'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { geoLocation = results[0].geometry.location; //log((geoLocation.lat() + ' / ' + geoLocation.lng() + ' ' + status)); } else { //log('Geocode was not successful for the following reason: ' + status); } }); log('stop generateLatLng()'); return geoLocation; } jQuery('document').ready(function() { var address = 'TU-Sportzentrum Dovestraße Berlin'; var geoLocation = generateLatLng(address); log(geoLocation); }); </script>
Ausgabe:
Anstatt von:start generateLatLng()
stop generateLatLng()
undefined
...was eben der Fall ist, wenn ich in der generateLatLng() ein Alert ausführe, wodurch sie ein paar Sekunden Zeit gewinnt, um die Antwort des Services abzuwarten und der log() ein sinnvolles Ergebnis zu übergeben.start generateLatLng()
stop generateLatLng()
(52.52030999999999, 13.319799999999987)
Wie kann man nun diesen Code complett synchron ausführen?Geändert von automatix1311 (15.01.12 um 13:07 Uhr)
-
15.01.12 21:33 #4
- Registriert seit
- Nov 2007
- Beiträge
- 26
Ja, das steht in meinem GIT Commit Kommentar von eben. Also, ich hab's!GMap! Yes! Fine and clean realized! Yeah!
Zusammengerechnet fast vier volle Tage vorm Schirm gesessen, aber am Ende exakt das erreicht, was ich wollte, und eine ganze Menge dazugelernt!
Im Anhang nun die komplette funktionierde Version. Viel Spaß!
Ähnliche Themen
-
lokalhost funktioniert skript / server funktioniert skript nicht
Von Eurocid im Forum PHPAntworten: 6Letzter Beitrag: 05.09.11, 20:22 -
Bildwechsel Skript funktioniert nicht
Von tester33 im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 16.06.11, 21:41 -
Seite soll nach Aufruf von Skript mit alert( ) auf aktueller Seite bleiben...
Von Sylan im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 19.06.07, 15:21 -
Thumbnail Skript funktioniert nicht
Von metno im Forum PHPAntworten: 7Letzter Beitrag: 14.12.06, 15:16 -
Wie funktioniert dieses kurze Datums-Skript?
Von Don Stefano im Forum PHPAntworten: 7Letzter Beitrag: 07.03.06, 22:11





Zitieren
Login





