Javascript 局部变量未更新
Javascript Local Variable Not Updated
我已经编写了这个函数来检测和更新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会逐行执行。
您首先告诉地理位置 API 尝试查找用户的当前位置,然后在执行其余工作时放开它并进行搜索。这称为异步执行。换句话说,你让地理位置API花时间搜索和找到用户的位置,而你做剩下的工作(其余的代码正在执行)。然后,当 API 找到位置时,它会执行您传递给它的函数。
将 ajax 的代码放入成功回调中,一切都会好起来的。
将
整个$.ajax({...});
调用放在getCurrentPosition
回调函数中;例如,将其直接放置在行console.log('reun');
之前或之后
相关文章:
- ngDialog-弹出窗口未更新范围变量
- 通过Ember颜色选择器更新SCSS变量
- Javascript用函数return替换局部变量
- 每次调用函数时,都要修改Javascript中的局部变量
- 局部变量在闭包中丢失
- 试图将一个局部变量传递给我的ngAside控制器
- jQuery.ajax()访问javascript循环中的beforeEnd局部变量
- AngularJS更新控制器变量并再次渲染视图
- 如何使用局部变量创建全局变量
- 在一个控制器中更新服务变量,并在另一个控制器 - Angular JS中使用更新的值
- 如何在单击链接后将局部变量发送到部分呈现
- 定义 JavaScript 类的局部变量
- 从另一个页面更新 JavaScript 变量的值
- 如何在运行总计计算器时返回表单输入并更新 JavaScript 变量
- 创建所有原型函数均可访问的局部变量
- 为什么我们将“(keyup)”分配给模板局部变量的随机值以在 Angular2 中更新
- Javascript 局部变量未更新
- 如果JavaScript对象是通过引用传递的,为什么不;t更新属性值更新局部变量
- Jquery更新,未定义局部变量
- 当变量作为参数传递给另一个函数时,更新函数的局部变量