Глобальная переменная, считать правильнае значение в функции
Есть код:
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:57. |