2016-01-06 4 views
0

Мой javascript отображает различные точки на карте карт Google после извлечения lat long и т. Д. Из моего XML-файла. Однако, когда маркер щелкнут, он должен показать информационное окно с именем местоположения (которое он делает). Проблема в том, что функция stoptimes(), которая вызывается для получения времени остановки шины, не вызывается. Я не знаю, почему это так. Я использовал проверки синтаксиса, чтобы проверить его, и он не сообщает об ошибке. Любые идеи относительно того, что это может быть?Почему моя функция javascript не запускается?

function stoptimes(stop) { 
    downloadiv("./times.php?stop=" + stop, function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("weather"); 

    for (var i = 0; i < markers.length; i++) { 
     var name = markers[i].getAttribute("arrival"); 
     document.getElementById("h2").innerHTML = name; 
    } 
    }); 
} 

function downloadiv(url, callback) { 
    var requesta = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    requesta.onreadystatechange = function() { 
    if (requesta.readyState == 4) { 
     requesta.onreadystatechange = donada; 
     callback(requesta, requesta.status); 
    } 
    }; 

    requesta.open('GET', url, true); 
    requesta.send(null);  
} 

function donada() {} 

function load() { 
    var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(53.5, -8), 
    zoom: 7, 
    }); 
    var infoWindow = new google.maps.InfoWindow; 
    geocoder = new google.maps.Geocoder(); 

    // Change this depending on the name of your PHP file 
    downloadUrl("stop-locations.php", function(data) { 
    var xml = data.responseXML; 
    var markers = xml.documentElement.getElementsByTagName("marker"); 

    for (var i = 0; i < markers.length; i++) { 
     var name = markers[i].getAttribute("name"); 
     var location = markers[i].getAttribute("name"); 
     var point = new google.maps.LatLng(
      parseFloat(markers[i].getAttribute("lat")), 
      parseFloat(markers[i].getAttribute("lng"))); 
     var lat=markers[i].getAttribute("lat"); 
     var lng=markers[i].getAttribute("lng"); 
     var html = "<b>" + name + "</b> <br/>"; 
     var stopid = markers[i].getAttribute("stopid"); 
     var marker = new google.maps.Marker({ 
     position:point, 
     map: map 
     }); 
     bindInfoWindow(marker, map, infoWindow, html, stopid); 
    } 
    }); 
} 

function bindInfoWindow(marker, map, infoWindow, html, stopid) { 
    google.maps.event.addListener(marker, 'click', function() { 
    infoWindow.setContent(html); 
    infoWindow.open(map, marker); 
    stoptimes(stopid); 
    }); 
} 

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, request.status); 
    } 
    }; 

    request.open('GET', url, true); 
    request.send(null); 
} 

function doNothing() {} 

ответ

0

Ни одна из ваших функций не вызывается, поэтому ваш код ничего не делает. Я думаю, вы забыли позвонить bindInfoWindow

+0

Нет, BindInfoWindow вызывается прямо над ним, где он определен. Он вызывается, когда тело загружается (что не показано выше). Информационное окно привязки определенно работает, потому что информационное окно появляется на карте google при щелчке маркера. –

+0

Если вызывается bindInfoWindow, то возникает ошибка в вашем обратном вызове до вызова вызова stoptime или stoptimes. Вы должны попробовать и добавить console.log в начале стоп-сигналов, чтобы убедиться, что он не называется – Axnyff

+0

Так что же просто поставить «console.log()» внутри функции? –

0

Вы звоните по номеру load() в любом месте в вашем коде? Возможно, вы имели в виду load(), чтобы быть onload(), как в window.onload?

Смежные вопросы