[JavaScript] Funktion läd nicht

Dieses Thema im Forum "Webentwicklung" wurde erstellt von uzer6, 18. Mai 2011 .

  1. 18. Mai 2011
    Funktion läd nicht

    Hi,
    ich bin grad dabei google maps in meine Seite einzubinden,
    wobei die user Punkte markieren können, die dann in eine Datenbank gespeichert werden, was soweit auch funktioniert, nur die funktion saveData() die beim drücken des Buttons aufgerufen werden sollte, wird nicht aufgerufen. Hat irgentjemand eine Idee woran das liegt?
    Code:
    var marker;
    var infoWindow = new google.maps.InfoWindow();
    var form = "<p>Name: <input type='text' id='name' /></p>" +
    "<p>Notiz: </p>" +
    "<div><textarea name='note' cols='20' rows='5'></textarea></div>" +
    "<p><input type='button' value='Speichern' onclick='saveData()' /></p>";
    function load() {
     var map = new google.maps.Map(document.getElementById("map"), {
     center: new google.maps.LatLng(53.75, 9.65),
     zoom: 13,
     mapTypeId: 'roadmap'
     });
     downloadUrl("xml.php", function(data) {
     var xml = parseXml(data);
     var markers = xml.documentElement.getElementsByTagName("marker");
     for (var i = 0; i < markers.length; i++) {
     var name = markers[i].getAttribute("name");
     var note = markers[i].getAttribute("note");
     var html = "<b>" + name+ "</b><br />" + note;
     var point = new google.maps.LatLng(
     parseFloat(markers[i].getAttribute("lat")),
     parseFloat(markers[i].getAttribute("lng")));
     var marker = new google.maps.Marker({
     map: map,
     position: point
     });
     bindInfoWindow(marker, map, infoWindow, html);
     }
     });
     google.maps.event.addListener(map, "click", function(event) {
     marker = new google.maps.Marker({
     position: event.latLng,
     map: map
     });
     bindInfoWindow(marker, map, infoWindow, form);
     });
     }
     function bindInfoWindow(marker, map, infoWindow, html) {
     google.maps.event.addListener(marker, 'click', function() {
     infoWindow.setContent(html);
     infoWindow.open(map, marker);
     });
     }
     function downloadUrl(url, callback) {
     var request = window.ActiveXObject ?
     new ActiveXObject('Microsoft.XMLHTTP') :
     new XMLHttpRequest;
    
     request.onreadystatechange = function() {
     if (request.readyState == 4) {
     request.onreadystatechange = doNothing;
     callback(request.responseText, request.status);
     }
     };
     request.open('GET', url, true);
     request.send(null);
     }
     function saveData() {
     var name = escape(document.getElementById("name").value);
     var note = escape(document.getElementById("note").value);
     var latlng = marker.getPosition();
     var url = "addmarker.php?name=" + name +
     "&note=" + note + "&lat=" + latlng.lat() + "&lng=" + latlng.lng();
     request.open('GET', url, true);
     request.send(null);
     infowindow.close();
     document.getElementById("message").innerHTML = "Location added.";
     }
     function parseXml(str) {
     if (window.ActiveXObject) {
     var doc = new ActiveXObject('Microsoft.XMLDOM');
     doc.loadXML(str);
     return doc;
     } else if (window.DOMParser) {
     return (new DOMParser).parseFromString(str, 'text/xml');
     }
     }
    
     function doNothing() {}
     
  2. 18. Mai 2011
    AW: Funktion läd nicht

    hi und willkommen bei RR,

    nimm die function aus der function load raus, also
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html>
    <head>
    <title>Unbenannt</title>
    
    <script type="text/javascript">
    function load (){
    }
    function saveData (){
     alert('xxx');
    }
    </script>
    
    </head>
    
    <body>
    
    <input type="submit" onclick="saveData();" />
    
    </body>
    </html>
    
    und nicht
    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    
    <html>
    <head>
    <title>Unbenannt</title>
    
    <script type="text/javascript">
    function load (){
     function saveData (){
     alert('xxx');
     }
    }
    </script>
    
    </head>
    
    <body>
    
    <input type="submit" onclick="saveData();" />
    
    </body>
    </html>
    
     
  3. 18. Mai 2011
    AW: Funktion läd nicht

    Du musst bei Javascript auf die Groß und Kleinschreibung achten:
    Guck in deine saveData-Funktion und nimm dir die Console deines Browser zur Hilfe!

    infowindow.close(); => infoWindow.close();
     
  4. 18. Mai 2011
    AW: Funktion läd nicht

    leider ist das nicht der fehler -.-
    die load() funktion endet vor bindInfoWindow funktion

    thx @nanobyte den fehler hätte ich bestimmt noch lange gesucht,
    aber leider ist da noch etwas früher ein fehler, da saveData() gar nicht erst aufgerufen wird

    Edit: das fehlende semikolon beim funktionsaufruf habe ich auch schon ergänzt.
     
  5. 18. Mai 2011
    AW: Funktion läd nicht

    was meint der werte herr konsole von schaumburg firebug zu dieser situation?
    frag den doch mal nett ob er was zu meckern hat.

    für interviews kann man ihn hier buchen:
    Firebug :: Add-ons für Firefox

    vielleicht hat er ja ein helfendes elixier.
     
  6. 18. Mai 2011
    AW: Funktion läd nicht

    Code:
    Uncaught TypeError: Cannot read property 'value' of null
    Probier mal bei der Textarea und dem Input mit id="name" und "note"


    Du solltest dir überlegen ob du nicht ein Framework für das Javascript benutzt, denn mit dem Code den du bisher hast wirst du in den vielen unterschiedlichen Browsern auf viele Probleme stoßen
     
  7. 18. Mai 2011
    AW: Funktion läd nicht

    Wow danke, an die Konsole hatte ich gar nich mehr gedacht, hab das Problem jetzt,
    der Fehler war, dass die Variable request nicht deklariert und das er die Eingabefelder nicht gefunden hat
     
  8. 18. Mai 2011
    AW: Funktion läd nicht

    ich seh grad nen groben schnitzer im design deiner app:

    Code:
    var xml = parseXml(data);
    var markers = xml.documentElement.getElementsByTagName("marker");
    sowas kannst du einfach umgehen, indem du in der datei "xml.php" den inhalt als xml auslieferst.

    einfach am anfang der datei folgendes notieren:
    PHP:
    header ( 'Content-Type: text/xml' );
    und schon ist der dom-parser unnötig, da es automatisch geschieht.
    "documentElement" ist auch so ne sache ...

    wobei man an der tabbreite sehen kann, dass du den code geklaut hast
     
  9. 18. Mai 2011
    AW: Funktion läd nicht

    xD ja hab ich aus dem Artikel von der google maps API documentation

    hab auch bisher noch nicht so mit javascript gearbeitet

    das php script hatte schon den Header gesetzt, hab das mit dem parser gemacht weil das halt von dem Artikel empfohlen wurde
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.