簡體   English   中英

在 AJAX 成功響應中調用函數?

[英]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 ,調用watchCurrentPositionclearmyWatch設置為可以到達positionTimerwatchCurrentPosition的內部函數。 其實通過設置clearmyWatch到的內部功能watchCurrentPosition我們創建了一個閉合(讀到它的,你不知道它是什么,這一點很重要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM