0

我正在获取地理位置。我遇到的问题是地理位置需要几秒钟才能响应。到那时,我的 ajax 已经在文档准备就绪时被调用,并且 long/lat 从未发布过。如何确保在地理定位完成之前不调用 ajax?

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
} else {
    //get it another way

    //else
    var Longitude = '0';
    var Latitude = '0';
}

function showPosition(position) {
    var Longitude = position.coords.longitude;
    var Latitude = position.coords.latitude;
}

$.ajax({
    url: 'activities.php?action=log-campaign-visit',
    type: 'post',
    data: {
        DeviceID: session,
        CampaignId: id,
        User: userid,
        IP: IP,
        Agent1: agent1,
        Referer1: referer1,
        CouponId: couponId,
        CampaignMedium: Cmedium,
        CampaignSource: source1,
        URL: fullUrl,
        RedemptionCode: RedemptionCode,
        Userlanguage: userLang,
        ScreenWidth: screenWidth,
        ScreenHeight: screenHeight,
        ScreenOrientation: orientation,
        Longitude: Longitude,
        Latitude: Latitude
    },
    success: function (data) {
        $('#RedemptionCode').html(data);
        if (data == 'Success') {}
    },
    done: function () {
        alert("done");
    },
    fail: function () {
        alert("error");
    },
    always: function () {
        alert("complete");
    },
});
4

3 回答 3

1

将您的 ajax 调用放在一个函数中;从调用它

  • function showPosition
  • else堵塞
  • 并在超时后(用户可能不会注意到接受地理定位)
于 2013-08-21T06:41:45.707 回答
0

如果地理位置可用,则需要在 geolocatoion 回调完成后发送 ajax 请求

我已将 ajax 请求移至单独的方法,因为它必须被调用两次,第一次在 else 部分中,第二次在地理位置回调中

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
} else {
    // get it another way

    doAjax('0', '0')
}

function showPosition(position) {
    var Longitude = position.coords.longitude;
    var Latitude = position.coords.latitude;
    doAjax(Latitude, Longitude)

}

function doAjax(Latitude, Longitude) {
    $.ajax({
        url : 'activities.php?action=log-campaign-visit',
        type : 'post',
        data : {
            DeviceID : session,
            CampaignId : id,
            User : userid,
            IP : IP,
            Agent1 : agent1,
            Referer1 : referer1,
            CouponId : couponId,
            CampaignMedium : Cmedium,
            CampaignSource : source1,
            URL : fullUrl,
            RedemptionCode : RedemptionCode,
            Userlanguage : userLang,
            ScreenWidth : screenWidth,
            ScreenHeight : screenHeight,
            ScreenOrientation : orientation,
            Longitude : Longitude,
            Latitude : Latitude
        },
        success : function(data) {
            $('#RedemptionCode').html(data);
            if (data == 'Success') {
            }
        },
        done : function() {
            alert("done");
        },
        fail : function() {
            alert("error");
        },
        always : function() {
            alert("complete");
        }
        ,
    });
}
于 2013-08-21T06:41:22.853 回答
0

将 Ajax 调用移至单独的函数。然后在 showPosition 函数和第一个 if 的 else 部分调用它。这样,它总是被调用,并等待地理定位完成。
如果您可以检查是否无法进行地理定位并在这种情况下也调用 ajax 调用,那也是一个好主意。

于 2013-08-21T06:41:55.067 回答