在AJAX成功响应中调用函数?

时间:2016-11-04 09:58:15

标签: javascript jquery ajax

我基本上试图在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

有人可以就此问题提出建议吗?

提前致谢。

2 个答案:

答案 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的定义方式是什么都不做。但是,调用watchCurrentPositionclearmyWatch设置为watchCurrentPosition的内部函数,可以到{{1} }}。实际上,通过将positionTimer设置为clearmyWatch的内部函数,我们创建了一个闭包(阅读它,你不知道它是什么,这很重要)。