【发布时间】:2025-12-09 08:25:01
【问题描述】:
对于为什么我从未点击下面的GETNEARCALLBACK 函数,我感到很困惑。逻辑是这样的:
- 在页面加载时我打电话给
INITIALIZE -
INITIALIZE愉快地执行并调用GETSTATIONS -
GETSTATIONS使用GETNEARESTSTAIONS作为回调函数执行 AJAX 请求,Web 服务器以 JSON 格式的数据库查询结果进行响应。 -
GETNEARESTSTAIONS获取结果并使用GETNEARCALLBACK作为回调函数创建 Google Maps API 距离矩阵请求 - 我运行我的站点并使用 Firebug 确定我永远无法访问
GETNEARCALLBACK。
我认为我对 Google Maps API 的使用是正确的,因为如果我不在我的 AJAX 请求中调用 GETNEARESTSTATIONS,它就会正确执行。
函数初始化(){ 获取位置(); 绘图(); 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];
}
}
}
【问题讨论】:
-
函数名称全部大写有什么特殊原因吗?读起来很不愉快。
-
console.log 在
if语句中检查readyState值和status值之前...你会得到什么?
标签: javascript ajax google-maps-api-3