Javascript加载函数是异步的

Javascript load functions asychronosuly

本文关键字:异步 函数 加载 Javascript      更新时间:2023-09-26

我正在获取地理位置。我遇到的问题是,地理定位需要几秒钟的时间才能做出响应。到那时,我的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");
    },
});

将ajax调用放入函数中;从呼叫

  • function showPosition
  • else
  • 并且在超时之后(用户可能没有注意到接受地理定位)

如果地理位置可用,则需要在地理位置回调完成后发送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");
        }
        ,
    });
}

将Ajax调用移动到separate函数。然后在showPosition函数和第一个if的else部分中调用它。这样,它总是被调用,并等待地理定位完成
如果您可以检查地理位置是否不可能,并在这种情况下调用ajax调用,这也是一个好主意。