我基本上试图在AJAX成功响应中调用一个不在我的AJAX之外的函数。
为了更好地解释这一点,我就是这样。
这是两个功能:
function watchCurrentPosition() {
var positionTimer = navigator.geolocation.watchPosition(function(position) {
setMarkerPosition(userLocation, position);
map.panTo(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
});
}
function clearmyWatch() {
navigator.geolocation.clearWatch(positionTimer);
}
其中一个人一直在观察用户位置,另一个人应该“停止”。
这就是我在AJAX中调用clearmyWatch();
函数的方式:
$.ajax({
type:"post",
url:"TEST.PHP",
datatype:"html",
success:function(data)
{
clearmyWatch();
}
});
但是,这不起作用且watchCurrentPosition();
一直在运行,我的控制台也出现错误。
我得到的错误是:
ReferenceError: positionTimer is not defined
有人可以就此问题提出建议吗?
提前致谢。
答案 0 :(得分:3)
您需要在positionTimer
之外的全球级别定义function watchCurrentPosition()
,例如:
var positionTimer = null;
function watchCurrentPosition() {
positionTimer = navigator.geolocation.watchPosition(function(position) {
setMarkerPosition(userLocation, position);
map.panTo(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
});
}
function clearmyWatch() {
if(positionTimer)
navigator.geolocation.clearWatch(positionTimer);
}
答案 1 :(得分:0)
positionTimer
位于watchCurrentPosition
没有全局变量解决问题的更好方法是:
function watchCurrentPosition() {
var positionTimer = navigator.geolocation.watchPosition(function(position) {
setMarkerPosition(userLocation, position);
map.panTo(new google.maps.LatLng(position.coords.latitude, position.coords.longitude));
});
clearmyWatch=()=>{
navigator.geolocation.clearWatch(positionTimer);
}
}
function clearmyWatch() {}
Explenation:clearmyWatch
的定义方式是什么都不做。但是,调用watchCurrentPosition
将clearmyWatch
设置为watchCurrentPosition
的内部函数,可以到{{1} }}。实际上,通过将positionTimer
设置为clearmyWatch
的内部函数,我们创建了一个闭包(阅读它,你不知道它是什么,这很重要)。