Я закодировал эту функцию для обнаружения и обновления переменных postLat и postLon.Локальная переменная Javascript не обновляется
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
}
}
});
}
Я использовал инструмент Javascript консоли Chrome, чтобы исследовать переменные (как напечатано с console.log()
), и это результат:
undefined 1231
undefined 1235
1.2957797
103.8501069
ruen
Далее в этот момент, у меня есть следующие вопросы:
- Почему переменные
postLon
иpostLat
не обновлены? На самом деле неопределенные переменные передаются вsearch-add-process.php
в блоке ajax, а не в фактических значениях. - Почему
navigator.geolocation.getCurrentPosition()
функция работает послеconsole.log(postLat+" 1231")
линия? Исправьте меня, если я ошибаюсь, я всегда предполагал, что Javascript будет выполняться по строкам.
Является ли 'getCurrentPosition()' вызовом AJAX? Функция обратного вызова, которую вы предоставили в нее, может запускаться после вызова 'console.log()'. – Blender
@Blender, 'getCurrentPosition()' принадлежит API геолокации, новый в HTML5. –
@Blender, вы можете посмотреть API геолокации в [Mozilla] (https://developer.mozilla.org/en/Using_geolocation). :) –