Javascript 局部变量未更新

Javascript Local Variable Not Updated

本文关键字:更新 局部变量 Javascript      更新时间:2023-09-26

我已经编写了这个函数来检测和更新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会逐行执行。

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

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

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