地理定位问题's异步调用
Problems with Geolocation's asynchronous call
我正试图将我的位置作为Ajax请求发送
可能是由于地理定位的异步调用,它无法按预期工作。Geolocation的函数是在我的外部函数之后调用的,结果是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>
我不能将Ajax请求放在geo_success
中,因为需要首先定义data
。在我的原始代码中(这里只是摘录),根据用户的选择,有几种可能的data
所以我只想要一个Ajax请求。
有什么可能的补救办法?
可能是由于地理定位的异步调用,它无法按预期工作。Geolocation的函数是在我的外部函数之后调用的,导致数据为空。
所以你的意思是这是一个异步调用?:
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.");
}
因此,如果您需要对异步操作的结果做出响应,只需将代码放在那些回调函数中即可。
异步意味着不同步。异步操作之后需要发生的任何事情都需要在该操作完成时由调用。在您的情况下,当您检查data
时,它将始终为空,因为您在创建它时明确地将其设置为空字符串,而当时没有其他内容更新它。
相关文章:
- 如何使用异步调用更改工厂的变量
- 使变量可用于不带闭包的异步调用
- 需要收集Javascript nodejs异步调用
- 如何使用jQuery等待来自回调的异步调用
- 使用模态库从嵌套的异步调用中生成javascript同步代码
- 在forEach内部进行异步调用
- jQuery没有指定异步调用级别async:false
- SPA异步调用在IE 11中不起作用
- Ember.js-模型find()方法中的异步调用
- Javascript/JQuery处理并发/异步调用和数据竞争
- 在异步调用返回之前隐藏页面
- ExtJs 处理异步调用
- ES6:在异步调用中使用生成器
- Angular js - 异步调用 $scope.users 后不更新模态值
- 在每个循环上完成异步调用,然后转到下一个节点 js
- 从异步调用返回数组,然后为数组的每个元素返回其他异步调用
- 使用 AngularJS 的异步调用
- 循环内部的Javascript异步调用
- 使用Canvas和ForEach处理异步调用
- JavaScript/promise,对sharepoint的多个异步调用