HTML5地理位置:如何在成功或错误回调后将lat和long值传递给AJAX调用

时间:2014-07-31 16:38:24

标签: html5 geolocation

我尝试使用HTML5s地理位置来获取用户位置的纬度和经度,然后将这些值传递给ajax调用。

我想做什么?

  1. 如果成功,我想将纬度和经度传递给ajax调用,如果出现错误,我想传递null。
  2. 到目前为止我做了什么?

    到目前为止,我已将ajax调用放在成功回调中,以便一旦结果可用,就会进行ajax调用。我现在要等到有错误消息,以便出现错误,可以通过传递空值进行ajax调用。

    发生了什么事呢?

    当用户允许共享位置时,会进行ajax调用,但是,如果用户决定不共享位置,则不进行ajax调用,而是打印出错误消息。我不确定如何更改我的代码,以便在进行AJAX调用之前监听成功和错误回调。

    我到目前为止编写的代码:

        //error callback
        var showError = function(error) {
            var errorMessage = "Unknown Error";
            switch(error.code) {
                case error.PERMISSION_DENIED:
                    errorMessage = "User denied the request for Geolocation.";
                    break;
                case error.POSITION_UNAVAILABLE:
                    errorMessage = "Location information is unavailable.";
                    break;
                case error.TIMEOUT:
                    errorMessage = "The request to get user location timed out.";
                    break;
                case error.UNKNOWN_ERROR:
                    errorMessage = "An unknown error occurred.";
                    break;
            }
            console.log(errorMessage);
    
        };  
    
    
        var lat = function(callback) {
            navigator.geolocation.getCurrentPosition(function (position) {
             var lat = position.coords.latitude;
             var lon = position.coords.longitude;
             callback.call(null, lat, lon);
            }, showError);
        };
    
        //get the latitude and longitude
        var getPosition = function() {
            lat(function (latitude, longitude) {
             alert("lat: " + latitude + ", lon: " + longitude);
        //AJAX call made here once the latitude and longitude are returned. 
            });
        }; 
    
        getPosition();
    

1 个答案:

答案 0 :(得分:0)

我不是100%确定我理解正确,但是在你自己打印错误之后仍然可以在错误时调用回调函数,如下所示:

var lat = function(callback) {
    navigator.geolocation.getCurrentPosition(function (position) {
      var lat = position.coords.latitude;
      var lon = position.coords.longitude;
      callback(lat, lon);
    }, function(error) {
      showError(error);
      callback();
    });
};

var getPosition = function() {
    lat(function (latitude, longitude) {
     alert("lat: " + latitude + ", lon: " + longitude);
     // AJAX call made here once the latitude and longitude are returned. 
     // In case of error, latitude and longitude will both be undefined
    });
};