2016-01-06 90 views
0

我的javascript在我的xml文件中檢索緯度等等之後,在Google地圖上繪製了不同的點。但是,當點擊一個標記時,它應該顯示一個包含位置名稱的信息窗口(它會這樣做)。問題是調用功能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在被定義的位置上方被調用。它在身體加載時被調用(這在上面沒有顯示)。綁定信息窗口絕對有效,因爲當單擊標記時,信息窗口出現在谷歌地圖中。 –

+0

如果bindInfoWindow被調用,那麼在調用停止時間或停止時間被調用之前,您的回調中可能存在錯誤。 您應該嘗試在停止時間開始時添加一個console.log,以確保它不被調用 – Axnyff

+0

那麼在函數內部放什麼「console.log()」? –

0

你是否在你的代碼中的任何地方調用load()? 您的意思是load()onload(),如window.onload

相關問題