回调中的Javascript回调

时间:2012-12-03 03:47:27

标签: javascript ajax google-maps-api-3

我很难理解为什么我从未点击下面的GETNEARCALLBACK功能。逻辑是这样的:

  1. 在页面加载时,我致电INITIALIZE
  2. INITIALIZE愉快地执行并致电GETSTATIONS
  3. GETSTATIONS使用GETNEARESTSTAIONS作为回调函数执行AJAX请求,并且Web服务器以JSON格式响应数据库查询的结果。
  4. GETNEARESTSTAIONS获取结果并使用GETNEARCALLBACK作为回调函数创建Google Maps API距离矩阵请求
  5. 我运行我的网站并使用Firebug来确定我从未到达GETNEARCALLBACK
  6. 我认为我对Google Maps API的使用是正确的,因为如果我不从我的AJAX请求中调用GETNEARESTSTATIONS,它就会正确执行。

    function INITIALIZE(){       为getPosition();       DRAWMAP();       GETADDR();       GETSTATIONS();     }

    var xmlhttp;
    
    function GETSTATIONS() {
      if(window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
      } else {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange = GETNEARESTSTATION();
      xmlhttp.open("GET", "final.php", true);
      xmlhttp.send();
    }
    
    var STATIONLIST;
    
    function GETNEARESTSTATION() {
      if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        STATIONLIST = eval("(" + xmlhttp.responseText + ")");
        var LAT = parseFloat(document.getElementById("LATITUDE").value);
        var LON = parseFloat(document.getElementById("LONGITUDE").value);
        var latlng = new google.maps.LatLng(LAT, LON);
        var destinationA = STATIONLIST[0].ADDRESS;
        var service = new google.maps.DistanceMatrixService();
        service.getDistanceMatrix({
          origins: [latlng],
          destinations: [destinationA],
          travelMode: google.maps.TravelMode.DRIVING,
          unitSystem: google.maps.UnitSystem.IMPERIAL,
          avoidHighways: false,
          avoidTolls: false
        }, GETNEARCALLBACK);
      }
    }
    
    function GETNEARCALLBACK(response, status) {
      if(status == google.maps.DistanceMatrixStatus.OK) {
        var destinations = response.destinationAddresses;
        var results = response.rows[0].elements;
        for(var j = 0; j < results.length; j++) {
          var element = results[j];
          document.getElementById("STATIONADDR").innerHTML = parseFloat(element.distance.value) + " " + response.destinationAddresses[j];
        }
      }
    }
    

1 个答案:

答案 0 :(得分:0)

需要函数变量,而不是函数返回值

//xmlhttp.onreadystatechange = GETNEARESTSTATION(); //error
xmlhttp.onreadystatechange = GETNEARESTSTATION;