Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将异步任务返回的值放入变量(全局?)_Javascript_Jquery_Asynchronous_Geolocation_Google Geolocation - Fatal编程技术网

Javascript 如何将异步任务返回的值放入变量(全局?)

Javascript 如何将异步任务返回的值放入变量(全局?),javascript,jquery,asynchronous,geolocation,google-geolocation,Javascript,Jquery,Asynchronous,Geolocation,Google Geolocation,我必须使用谷歌(或类似的)地理编码API来按纬度和经度获取信息(州、国家、地址) 我在谷歌上搜索了很多,找到了一些有用的代码,但这些代码会将信息放在一个警告框中 我找到了有关回调函数的提示 我需要在异步任务之外使用“state”或“Country”(例如,当我按下按钮时,在HTML页面中) 我试图创建一个全局变量(actArea),但是在调用navigator.geolocation.getCurrentPosition之后,它的值为“空”。 我认为这是正确的,因为异步任务是异步的,但是如何将异

我必须使用谷歌(或类似的)地理编码API来按纬度和经度获取信息(州、国家、地址)

我在谷歌上搜索了很多,找到了一些有用的代码,但这些代码会将信息放在一个警告框中

我找到了有关回调函数的提示

我需要在异步任务之外使用“state”或“Country”(例如,当我按下按钮时,在HTML页面中)

我试图创建一个全局变量(actArea),但是在调用navigator.geolocation.getCurrentPosition之后,它的值为“空”。 我认为这是正确的,因为异步任务是异步的,但是如何将异步任务的结果保存到全局变量或类似变量中呢

为什么回调不起作用? 错在哪里

我也尝试过使用setTimeout,但结果相同

谢谢

这是我代码(geodec.js)的一部分:


此代码工作精细纬度:45.076947经度:7.614174面积:Piedmont@Alex但不在异步任务之外。我想在我的应用程序的其他部分也使用“皮埃蒙特”。我的应用程序需要在启动时对用户进行本地化,并在用户每次按下按钮时向用户发送本地化信息。@MassimoCostanzo但这就是回调的重点(retrieveGPSdata),它会告诉您服务器调用何时完成。如果您有其他需要该值的功能(您提到了一个按钮),那么在您的回调完成之前,它们可能应该被禁用。@MassimoCostanzo ok看看。异步调用与范围无关(事情不在范围内或范围外),而是与时间有关。如果您需要更多的解释,请让我知道。@MassimoCostanzo在这个问题上很难通过代理进行调试;)尝试将
警报(err.message)
替换为
console.dir(err)
并查看结果。这是一个非常简单的代码,在其他浏览器(包括我的MBP上的Safari)上使用它时,一定会出现一些奇怪的设置。
var x = document.getElementById("destination_div");

var actLatPos = 45.076947;
var actLonPos = 7.614174;
var actArea = 'EMPTY';

function getLocation() {

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition,showError);

        //actArea returns "EMPTY"
        alert(actArea);

    } else {
        x.innerHTML = "Geolocation is not supported by this browser.";
    }

}

function retrieveGPSdata(data)
{
    actArea=data.results[0].address_components[5].long_name;

    //actArea returns "Piemonte"
    alert(actArea);

    $('#destination_div').text( "Latitude: " + actLatPos + " Longitude: " + actLonPos + " Area: " + actArea);
}
function showPosition(position) {
    var richiesta='http://maps.googleapis.com/maps/api/geocode/json?latlng=' + actLatPos + ',' +  actLonPos + '&sensor=true';

    //setTimeout(function()
    //{
        $.ajax({ url:richiesta, success:retrieveGPSdata});
    //},8000);

}