我编写了这个函数来检测和更新postLat和postLon变量。
function searchAddSubmit(){
var shopId = 1; //random number to test the function
var postLon, postLat;
var shopTime = $("#selected-search-result-minutes").val();
navigator.geolocation.getCurrentPosition(function(position){
postLat=position.coords.latitude;
postLon=position.coords.longitude;
console.log(postLat);
console.log(postLon);
console.log('reun');
},function(error){});
console.log(postLat+" 1231");
console.log(postLon+" 1231");
$.ajax({
type: "POST",
url: "search-add-process.php",
cache: false,
dataType: "json",
data:{
id: shopId,
time: shopTime, //this value is taken from a form input
lat: postLat,
lon: postLon
},
success: function (data) {
if(data.error === true) {
alert(data.msg);
} else {
alert(data.msg);
//remove output when successful
}
}
});
}
我使用Chrome的Javascript控制台工具检查变量(用console.log()
打印),结果如下:
undefined 1231
undefined 1235
1.2957797
103.8501069
ruen
到此为止,我有这些问题:
postLon
和postLat
未更新?实际上,未定义的变量会传递到ajax块中的search-add-process.php
,而不是实际值。navigator.geolocation.getCurrentPosition()
函数在console.log(postLat+" 1231")
行之后运行?如果我错了,请纠正我,我一直认为Javascript会逐行执行。答案 0 :(得分:1)
首先告诉Geolocation API尝试查找用户的当前位置,然后在完成剩余的工作时让它继续搜索。这称为异步执行。换句话说,您让Geolocation API花时间搜索并找到用户的位置,同时完成剩余的工作(其余代码正在执行)。然后当API找到位置时,它会执行你传递给它的函数。
将ajax的代码带入成功回调,一切都会好的。
答案 1 :(得分:0)
将整个$.ajax({...});
调用放在getCurrentPosition
回调函数中;
例如将其直接放在行console.log('reun');