我试图将我的位置作为Ajax请求发送
可能由于地理定位的异步调用,它并没有按预期工作。
在我的外部函数之后调用地理定位函数,从而得到data is empty
答案。
$(document).ready(function() {
$("button").click(function() {
var data = "";
if (...) { // if user wants to share their location
function geo_success(position) {
console.info("lat:" + position.coords.latitude + " Lot: " + position.coords.longitude);
data = {
lat : position.coords.latitude,
lon : position.coords.longitude
};
}
function geo_error() {
alert("No position available.");
}
var geo_options = {
enableHighAccuracy : true,
timeout : 1000,
maximumAge : 0
};
navigator.geolocation.getCurrentPosition(geo_success, geo_error, geo_options);
}
if (...) { // if user doesn't want to share their location
data = {
a : "abc", // some other data
b : "def"
};
}
if (...) { // maybe a third option
data = {
b : "test", // some other data
c : "some data"
};
}
if (Object.keys(data).length > 0) {
console.info("hier");
$.ajax({
method : "GET",
url : "test.php",
data : data, // finaly send data
dataType : 'json',
success : function(data) {
console.log(data)
},
error : function(data) {
console.error(data);
}
});
} else {
console.error("data is empty");
}
});
});
<input type="checkbox" id="box1" />
<button>ok</button>
我无法在geo_success
中添加Ajax请求,因为需要首先定义data
。在我的原始代码中(这里只是一个摘录),有几种可能data
,具体取决于用户的选择。
所以我想只有1个Ajax请求。
什么可能是一种可能的补救措施?
答案 0 :(得分:0)
可能由于地理定位的异步调用,它无法按预期工作。在我的外部函数之后调用Geolocation的函数,导致数据为空答案。
所以你的意思是这是一个异步调用?:
getp
如果是这种情况,那么我怀疑你可以为它提供回调函数,以便在操作完成时执行。并且......看起来你已经在做那件......
navigator.geolocation.getCurrentPosition(geo_success, geo_error, geo_options);
因此,如果您需要响应异步操作的结果,只需将该代码放入这些回调函数中。
异步意味着... 不同步。在异步操作之后需要发生的任何事情需要在完成时通过该操作调用。在你的情况下,当你检查它时function geo_success(position) {
console.info("lat:" + position.coords.latitude + " Lot: " + position.coords.longitude);
data = {
lat : position.coords.latitude,
lon : position.coords.longitude
};
}
function geo_error() {
alert("No position available.");
}
总是空的,因为你在创建它时显式地将它设置为一个空字符串,并且当时没有其他任何更新它。