Глобальная переменная, считать правильнае значение в функции
Есть код:
var adresssss; //Первая функция: ... var ar = new Array("Bonn","Bergisch Gladbach"); var count = 2; var j; for(j = 0;j < count; j++){ adresssss = ar[j]; alert(address); // alert 1 geocoder.getLocations(adresssss, addClubToMap); } ... //Функция закончилась function addClubToMap(response) { place = response.Placemark[0]; point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]); if( (point.distanceFrom(map.getCenter())/1000) <= (parseInt(document.forms[0].umkreis.value)) ){ var marker = createMarker(point,"abc","afa"); alert(adresssss); // alert 2 map.addOverlay(marker); } } Как я думаю уже видно вторая функция вызывается в первой, но Проблема в том что в первой первый alert выдаёт сначала "Bonn" потом "Bergisch Gladbach"(всё верно). Но во второй функции уже второй alert выдаёт 2 раза "Bergisch Gladbach". Немогу понять в чем проблема. adresssss - глобальная переменная. |
После окончания перебора значением переменной является "Bergisch Gladbach" (последний элемент массива). Если больше нигде переменной не присваивается новое значение, то результат будет неизменным.
|
Как я понял geocoder.getLocations делает асинхронный запрос на сервер.
Т.е. в вашем случае ДВА асинхронных запроса. Пока дело доходит до второго alert-а, глобальная переменная adresssss уже равна второму значению. Судя по вот этому тексту: <Placemark> <address> 1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA </address> <AddressDetails Accuracy="8"> <Country> <CountryNameCode>US</CountryNameCode> <AdministrativeArea> <AdministrativeAreaName>CA</AdministrativeAreaName> <SubAdministrativeArea> <SubAdministrativeAreaName>Santa Clara</SubAdministrativeAreaName> <Locality> <LocalityName>Mountain View</LocalityName> <Thoroughfare> <ThoroughfareName>1600 Amphitheatre Pkwy</ThoroughfareName> </Thoroughfare> <PostalCode> <PostalCodeNumber>94043</PostalCodeNumber> </PostalCode> </Locality> </SubAdministrativeArea> </AdministrativeArea> </Country> </AddressDetails> <Point> <coordinates>-122.083739,37.423021,0</coordinates> </Point> </Placemark> в ответе есть address и вам не нужно передавать его через глобальную переменную. Почитайте документацию по геокодированию. |
geocoder.getLocations
Это что за функция? у меня есть подозрение, что это асинхронный запрос. тогда ответ очевиден: к моменту прихода первого ответа с сервера, цикл УЖЕ успел прокрутится и глобальная переменная adresssss="Bergisch Gladbach" попробуйте обернуть addClubToMap в качестве параметра в замыкание, используя другое имя для хранения адреса почитайте про замыкания,в особенности эту часть статьи PS alert(address); - это надеюсь опечатка, при перенесении на форум |
А как мне добыть нужный адрес??
Мне нужен тот адрес(город) который прошел проверку через if(). |
Щас почитаем, спасибо. :yes:
Я ещё напишу, не раchодитесь :stop: |
Адрес получилось получить при помощи
response.Placemark[0].address Shasoft спасибо. Gvozd тоже спасибо за ценную информацию. |
пожалуйста.
советую,если появится свободное время, перечитать весь цикл статей на этом сайте. их не так уж много, но они очень полезные |
Как-нибудь перечитаю, а пока еше один вопрос, не по теме конечно но всё же
Существуэт ли возможност обрезать String в JavaScript?? Например у меня есть var string = "Bonn, Haupt str"; И мне надо отдель взять "Bonn" и отдельно "Haupt str". Логично что кол-во букв каждого значения будет изменятся но это не суть. Главное щас узнать возмож но ли это в JavaScript. Поискал по инету не нашел. Если нет то будем обрезать в php. |
Цитата:
|
Часовой пояс GMT +3, время: 02:52. |