Javascript本地变量未更新

时间:2012-05-31 05:40:10

标签: javascript geolocation local-variables

我编写了这个函数来检测和更新postLat和postLon变量。

function searchAddSubmit(){
    var shopId = 1; //random number to test the function
    var postLon, postLat;
    var shopTime = $("#selected-search-result-minutes").val();
    navigator.geolocation.getCurrentPosition(function(position){
        postLat=position.coords.latitude;
        postLon=position.coords.longitude;
        console.log(postLat);
        console.log(postLon);
        console.log('reun');
    },function(error){});
    console.log(postLat+" 1231");
    console.log(postLon+" 1231");
    $.ajax({
        type: "POST",
        url: "search-add-process.php",
        cache: false,
        dataType: "json",
        data:{
            id: shopId,
            time: shopTime, //this value is taken from a form input
            lat: postLat,
            lon: postLon
        },
        success: function (data) {
            if(data.error === true) {
                alert(data.msg);
            } else {
                alert(data.msg);
                //remove output when successful
            }
        }
    });
}

我使用Chrome的Javascript控制台工具检查变量(用console.log()打印),结果如下:

undefined 1231
undefined 1235
1.2957797
103.8501069
ruen

到此为止,我有这些问题:

  1. 为什么变量postLonpostLat未更新?实际上,未定义的变量会传递到ajax块中的search-add-process.php,而不是实际值。
  2. 为什么navigator.geolocation.getCurrentPosition()函数在console.log(postLat+" 1231")行之后运行?如果我错了,请纠正我,我一直认为Javascript会逐行执行。

2 个答案:

答案 0 :(得分:1)

首先告诉Geolocation API尝试查找用户的当前位置,然后在完成剩余的工作时让它继续搜索。这称为异步执行。换句话说,您让Geolocation API花时间搜索并找到用户的位置,同时完成剩余的工作(其余代码正在执行)。然后当API找到位置时,它会执行你传递给它的函数。

将ajax的代码带入成功回调,一切都会好的。

答案 1 :(得分:0)

将整个$.ajax({...});调用放在getCurrentPosition回调函数中; 例如将其直接放在行console.log('reun');

之前或之后