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