0

我已经编写了这个函数来检测和更新 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. 为什么是变量postLon而不postLat更新?事实上,未定义的变量被传递到search-add-process.phpajax 块中,而不是实际值。
  2. 为什么navigator.geolocation.getCurrentPosition()函数在行后运行console.log(postLat+" 1231")?如果我错了,请纠正我,我一直认为 Javascript 会逐行执行。
4

2 回答 2

1

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

将ajax的代码放入成功回调中,一切都会好起来的。

于 2012-05-31T05:46:51.457 回答
0

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

于 2012-05-31T05:47:26.167 回答