从回调函数获取结果并设置为全局变量

时间:2014-09-22 18:43:34

标签: javascript ajax function google-maps callback

所以我一直在疯狂地研究这个话题,每次都得到相同的结果,而且我并没有真正得到任何有用的答案。我理解回调函数的概念是什么,但也许我实现它错了。所以这就是我所拥有的。

我正在处理谷歌地图任务,我还有其他一切正常工作,只是当他们来到页面时,我希望他们将当前位置存储在' start&#中39;变量在顶部。它可以存储为对象或数组,但没有区别。我已经使用警告框来测试我的输出,但我无法快速完成任务。我将在下面发布我的代码。

//set global variables that will be used for the maps later on in the script
var pj; 
var tifton;
var nlv;
var direction;
var start ='default';

function initialize(){    
    pj = new google.maps.LatLng(41.048899, -95.822685); //map for pacific junction
    tifton = new google.maps.LatLng(31.417032, -83.498785); //map for tifton
    nlv = new google.maps.LatLng(36.228928, -115.112426); //map for north las vegas
    //set the directions for the user

    updateCoords(function(point){
        if(point){
            start = point.latitude;
        }
    });

    alert(start); //it will not stop showing default as the result

    drawMap(pj,"pj-map", "Pacific Junction, IA");
    drawMap(tifton, "tifton-map", "Tifton, GA");
    drawMap(nlv, "nlv-map", "North Las Vegas, NV")
}

function drawMap(coords, div, title){
    var opts = {
        zoom: 8,
        center: coords,
        panControl: false,
        zoomControl: false,
        scaleControl: false,
        scrollwheel: false,
        draggable: false,
        disableDoubleClickZoom: true
    }; //generate map options for each individual map

    var map = new google.maps.Map(document.getElementById(div), opts); //set the canvas that the map will be drawn to
    var marker = new google.maps.Marker({
        position: coords,
        title: title
    });
    marker.setMap(map);
}
function updateCoords(callback){
    navigator.geolocation.getCurrentPosition(function(position){
         var pos = {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude
         };

        callback(pos);
    });
}

google.maps.event.addDomListener(window, 'load', initialize);

编辑:为了回答将此问题标记为重复,我将添加更多细节。提供给我的问题的链接,对我来说没有任何帮助。它所做的只是重复迭代是异步和同步功能和过程对我而言。我不再需要了。

我正在寻找的是一种可以帮助我打破这个内部的反应

function updateCoords(callback){
    navigator.geolocation.getCurrentPosition(function(position){
         var pos = {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude
         };
         if()
        callback(pos);
    });
}

以及为什么这个

updateCoords(function(point){
    if(point){
        start = [ point.latitude, point.longitude];
    }
});

完全没有在我在本问题的开头提供的示例代码中调用它的时间。我知道函数" updateCoords'是异步的,我不需要再向我重复。我读到了与我有关的问题的全部回复,并且它再次没有给我提供任何新信息。所以总结一下我的问题和我的大部分挫折感:

  1. 我正在进行异步和同步行为。
  2. 我在函数调用期间错过了特定时刻的时序,我无法确定它。
  3. 我尝试了几个不同的例子,包括与我有关的问题,结果都失败了。
  4. 有人可以帮助我确定错误是什么,错过功能的时间,以及为什么会发生错误,然后协助我找出解决该问题的正确方法。

1 个答案:

答案 0 :(得分:0)

地理定位功能是异步的。您需要在回调函数中使用结果。

function initialize(){    
    pj = new google.maps.LatLng(41.048899, -95.822685); //map for pacific junction
    tifton = new google.maps.LatLng(31.417032, -83.498785); //map for tifton
    nlv = new google.maps.LatLng(36.228928, -115.112426); //map for north las vegas
    //set the directions for the user

    updateCoords(function(point){
        if(point){
            start = point.latitude;
            alert(start); //it will not stop showing default as the result

        }
    });