Javascript加载函数asychronosuly

时间:2013-08-21 06:38:08

标签: javascript jquery ajax

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

3 个答案:

答案 0 :(得分:1)

将ajax调用放在函数中;从

中调用它
  • function showPosition
  • else阻止
  • 并在超时后(用户可能不会注意接受地理定位)

答案 1 :(得分: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");
        }
        ,
    });
}

答案 2 :(得分:0)

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