Здесь у меня есть функция calculateDistance, которая должна вернуть мне расстояние между двумя местами и временем, поэтому я пишу:
function calculateDistances(start,stop) {
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [start],
destinations: [stop],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status) {
if (status != google.maps.DistanceMatrixStatus.OK) {
alert('Error was: ' + status);
} else {
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
var xxx= "";
xxx += origins[i] + ' to ' + destinations[j]
+ ': ' + results[j].distance.text + ' in '
+ results[j].duration.text + '<br>';
return xxx;
}
}
}
}
после этого я пишу код для реализации этой функции в моем js-коде:
//Start function for calculate distance
var start = document.getElementById("from").value;
var stop = place.formatted_address;
contentStr += '<p>'+ calculateDistances(start,stop); + '</p>';
//I open rendered HTML in jquery dialog when user click on marker
$(contentStr).dialog({
modal:true
});
Я просто получаю HTML: undefined и в консоли: Uncaught TypeError: Cannot read property '__e3_' of null
Как я могу решить эту проблему? ПОЛНЫЙ КОД: http://jsbin.com/EVEWOta/96/edit
Служба DirectionsService является асинхронной. Вы не можете "вернуть" результаты из функции обратного вызова. Вы должны использовать результаты, когда они возвращаются сервером (в функции обратного вызова). Не испытано:
function calculateDistances(start,stop) {
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [start],
destinations: [stop],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status) {
if (status != google.maps.DistanceMatrixStatus.OK) {
alert('Error was: ' + status);
} else {
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
var xxx= "";
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
xxx += origins[i] + ' to ' + destinations[j]
+ ': ' + results[j].distance.text + ' in '
+ results[j].duration.text + '<br>';
}
var contentStr += '<p>'+ xxx + '</p>';
}
//I open rendered HTML in jquery dialog when user click on marker
$(contentStr).dialog({
modal:true
});
}
}
//Start function for calculate distance
var start = document.getElementById("from").value;
var stop = place.formatted_address;
calculateDistances(start,stop);