Переменная javascript в Google Maps недоступна, поэтому запутался! - PullRequest
0 голосов
/ 09 мая 2011

Я работаю с Google Maps v3 и столкнулся с очень запутанной ситуацией, используя StreetViewService для проверки улиц на моем маркере. В моей функции loadMap я выполняю эту проверку, используя:

//more 'loadMap' function code above and below this

var streetViewCheck = new google.maps.StreetViewService();  
streetViewCheck.getPanoramaByLocation(latlng, 50, function(result, status) {
    if (status == google.maps.StreetViewStatus.ZERO_RESULTS) {
        streetViewAvailable = 0;        
    }else{
        streetViewAvailable = 1;
    }
});
alert(streetViewAvailable);

Приведенное выше предупреждение выдает это сообщение об ошибке js. 'streetViewAvailable не определено' , и переменная недоступна где-либо во всей функции. Однако, если я поставлю свои предупреждения здесь:

var streetViewCheck = new google.maps.StreetViewService();  
streetViewCheck.getPanoramaByLocation(latlng, 50, function(result, status) {
    if (status == google.maps.StreetViewStatus.ZERO_RESULTS) {
        streetViewAvailable = 0;
        alert(streetViewAvailable);     
    }else{
        streetViewAvailable = 1;
        alert(streetViewAvailable);
    }
});

Они предупреждают правильно (т. Е. 0, если просмотр улиц недоступен, 1, если он есть), но опять-таки переменная недоступна в любом месте функции. И теперь для действительно озадачивающей части, переменная доступна в других функциях.

Что на земле происходит? Почему моя переменная не определена в функции, которая ее инициализирует, а определяется и доступна в других функциях. Я не самый лучший кодер в мире (но не самый плохой разработчик!), Но это полностью меня озадачило. Я пробовал много вариантов, но все с тем же результатом (то есть инициализируем переменную 'streetViewAvailable' над моим новым google.maps.StreetViewService (); кодом, присваивая им значения 'yes' и 'no' вместо 1 и 0, делая их локальными переменными вместо глобальных (var streetViewAvailable ...) и всеми комбинациями только что упомянутых ранее, но все с тем же результатом, не определенным в этой функции.

Пожалуйста, пожалуйста, помогите мне понять это, это также поставило в тупик других наших кодеров, это противоречит всей логике !!! Большое спасибо заранее, я надеюсь, что кто-то может пролить свет на это, прежде чем мой мозг взорвется !!!

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Это поведение по умолчанию для любого вызова AJAX.Ваш streetViewCheck.getPanoramaByLocation() выполняет AJAX-вызов, чтобы найти данные.Поскольку вызов асинхронный, остальная часть вашего кода продолжает выполняться, и предупреждение выполняется до завершения вызова ajax.Вот почему он пуст.

1 голос
/ 09 мая 2011
//more 'loadMap' function code above and below this
var streetViewAvailable;

var streetViewCheck = new google.maps.StreetViewService();  
streetViewCheck.getPanoramaByLocation(latlng, 50, function(result, status) {
    if (status == google.maps.StreetViewStatus.ZERO_RESULTS) {
        streetViewAvailable = 0;        
    }else{
        streetViewAvailable = 1;
    }
});
alert(streetViewAvailable);

Попробуйте - вы действительно забыли объявить streetViewAvailable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...