![](/img/trans.png)
[英]Calling function inside jQuery ajax success response works once but not twice
[英]Calling a function inside an AJAX success response?
我基本上是在嘗試在 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);
}
其中一個一直在監視用戶的位置,而另一個“應該”阻止它。
這就是我如何調用clearmyWatch();
AJAX 中的函數:
$.ajax({
type:"post",
url:"TEST.PHP",
datatype:"html",
success:function(data)
{
clearmyWatch();
}
});
但是,這不起作用並且watchCurrentPosition();
不斷運行,我的控制台也出現錯誤。
我得到的錯誤是這樣的:
ReferenceError: positionTimer is not defined
有人可以就這個問題提出建議嗎?
提前致謝。
您需要在function watchCurrentPosition()
之外的全局級別定義positionTimer
,例如:
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);
}
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() {}
說明: clearmyWatch
的定義方式是它什么watchCurrentPosition
做。 clearmyWatch
,調用watchCurrentPosition
將clearmyWatch
設置為可以到達positionTimer
的watchCurrentPosition
的內部函數。 其實通過設置clearmyWatch
到的內部功能watchCurrentPosition
我們創建了一個閉合(讀到它的,你不知道它是什么,這一點很重要)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.