Javascript JS全局变量保持不变

Javascript JS全局变量保持不变,javascript,geolocation,Javascript,Geolocation,我有两个全局变量,并将它们转换为一个函数,但它仍然显示为未定义 var lat var long; function getLocation() { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { console.log("Geolocation is not supported by this

我有两个全局变量,并将它们转换为一个函数,但它仍然显示为未定义

var lat
var long;
function getLocation()
{
    if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition);
    } else
    {
        console.log("Geolocation is not supported by this browser.");
    }
}
function showPosition(position)
{
    lat = position.coords.latitude;
    long = position.coords.longitude;
}
getLocation();
console.log(lat + "   " + long);
我在这个网站上查过其他问题,但似乎没有一个答案。当我检查ShowPosition函数内部时,它会显示实际坐标。我是js新手,请帮忙

编辑:

我还有一个函数,我想在其中访问全局变量

function generate_list(params, fromPageLoad)
{
    var ajax_url = jQuery('#ajax_post_url').val();
    var data = { action: 'generate_list', latitude: lat, longitude: long };
    var extended_data = jQuery.extend(data, params);

    jQuery.ajax({
    type: 'POST',
    data: extended_data,
    url: ajax_url,
    success: function (data) {
            //console.log(data);}
}
在加载带有动态参数的页面时调用此函数

我也试着让拉特朗回到showPosition,但它不起作用。“POST”或“GET”方法不返回坐标变量

function showPosition(position)
    {
        var ajax_url = jQuery('#ajax_post_url').val();
        var lat = position.coords.latitude;
        var long = position.coords.longitude;
        jQuery.ajax({
            type: 'POST',
            data: { lat: lat,long: long },
            url: ajax_url,
            success: function(data)
            {
            }
        });

        console.log("Latitude: " + position.coords.latitude +
            "Longitude: " + position.coords.longitude);
    }
如果用户允许该位置,我想更改列表。

geolocation.getCurrentPosition是异步API。尝试在函数showPositionposition内移动console.log。 很多(如果不是所有)带有回调的API都是异步的。外面要小心

回答你,亲爱的朋友

let lat;
let long;
navigator.geolocation.getCurrentPosition(success, null, {});

function success(pos) {
  lat = pos.coords.latitude
  long = pos.coords.longitude

  console.log('lat =',lat)
  console.log('long =',long)

}

您正在showPosition中更改它们,但调用getLocation,因此没有任何更改;getLocation正在调用showPositionFYI,中的最后一个示例使其完全重复。@deceze我撤销了以前的注释。此问题不包含任何问题。你说得对。我已经继续并删除了我的答案。在全局变量中存储数据不是在函数之间传递数据的方式Side showPosition正在工作,但我想将坐标传递给另一个函数,因此我将其分配给全局变量。只需在showPosition中调用函数?因为实际上全局变量已更改,因此,如果该函数在以后运行,它应该能够获得lat和long。如果它立即运行,则需要在showPosition中不幸的是,在加载页面时加载showPosition时,我无法将另一个函数添加到showPosition中。@如果可以从中分配全局变量,为什么不能从中调用其他代码?你必须以这样或那样的方式来做。以代码段的形式运行它不起作用。我想将lat,long传递给另一个函数,这就是为什么我需要全局变量中的值。这不管用。