У вас там большая проблема. Вы вызываете асинхронный метод $.ajax()
, где его функция обратного вызова будет вызываться после возврата из функции changeMapLocation()
, и поэтому ваша функция не будет работать так, как вы ожидаете. Следуйте комментариям в примере ниже:
function changeMapLocation(state) {
var lat;
var long1;
// Since the $.ajax() method is using the asynchronous XMLHttpRequest, it
// will not block execution, and will return immediately after it is called,
// without waiting for the server to respond.
$.ajax({
url: 'url-here',
type: 'POST',
success: function(longlatJson) {
// The code here will be executed only when the server returns
// a response to the ajax request. This may happen several
// milliseconds after $.ajax() is called.
var jsonObj = JSON.parse(JSON.stringify(longlatJson));
lat = jsonObj.results[0].geometry.location.lat;
long1 = jsonObj.results[0].geometry.location.lng;
// Now lat and long1 are set, but it is too late. Our
// changeMapLocation() function will have already returned.
}
});
// This part will be reached before the server responds to the asynchronous
// request above. Therefore the changeMapLocation() function returns an
// object with two properties lat1 and lat2 with an undefined value.
return {lat1: lat, lat2: long1};
}
Вы должны рассмотреть возможность рефакторинга вашего кода таким образом, чтобы логика обработки ответа ajax находилась в обратном вызове success
. Пример:
function changeMapLocation(state) {
$.ajax({
url: 'url-here',
type: 'POST',
success: function(longlatJson) {
var jsonObj = JSON.parse(JSON.stringify(longlatJson));
var lat = jsonObj.results[0].geometry.location.lat;
var long1 = jsonObj.results[0].geometry.location.lng;
// Update your map location in here, or call a helper function that
// can handle it:
myGoogleMap.setCenter(new google.maps.LatLng(lat, long1));
}
});
}
Обратите внимание, что changeMapLocation()
больше ничего не возвращает. Он просто изменит местоположение карты самостоятельно, когда сервер ответит на запрос Ajax.
Кроме того, обратите внимание, что ваши переменные lat
и long1
были включены в область действия внутренней функции success
и недоступны из внешней функции.