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

地理位置情報が利用可能な場合は、地理位置情報コールバックが完了した後に ajax リクエストを送信する必要があります

ajax リクエストを別のメソッドに移動しました。2 回呼び出す必要があるためです。最初は else 部分で、2 番目はジオロケーション コールバックです。

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 に答える