Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Глобальная переменная, считать правильнае значение в функции (https://javascript.ru/forum/misc/3049-globalnaya-peremennaya-schitat-pravilnae-znachenie-v-funkcii.html)

konstantinopol 13.03.2009 11:43

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

Zeroglif 13.03.2009 11:53

После окончания перебора значением переменной является "Bergisch Gladbach" (последний элемент массива). Если больше нигде переменной не присваивается новое значение, то результат будет неизменным.

Shasoft 13.03.2009 11:58

Как я понял 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 и вам не нужно передавать его через глобальную переменную.

Почитайте документацию по геокодированию.

Gvozd 13.03.2009 12:03

geocoder.getLocations
Это что за функция?
у меня есть подозрение, что это асинхронный запрос.
тогда ответ очевиден:
к моменту прихода первого ответа с сервера, цикл УЖЕ успел прокрутится и глобальная переменная adresssss="Bergisch Gladbach"

попробуйте обернуть addClubToMap в качестве параметра в замыкание, используя другое имя для хранения адреса
почитайте про замыкания,в особенности эту часть статьи
PS alert(address); - это надеюсь опечатка, при перенесении на форум

konstantinopol 13.03.2009 12:04

А как мне добыть нужный адрес??

Мне нужен тот адрес(город) который прошел проверку через if().

konstantinopol 13.03.2009 12:06

Щас почитаем, спасибо. :yes:
Я ещё напишу, не раchодитесь :stop:

konstantinopol 13.03.2009 14:05

Адрес получилось получить при помощи
response.Placemark[0].address
Shasoft спасибо.

Gvozd тоже спасибо за ценную информацию.

Gvozd 13.03.2009 14:09

пожалуйста.
советую,если появится свободное время, перечитать весь цикл статей на этом сайте.
их не так уж много, но они очень полезные

konstantinopol 13.03.2009 14:14

Как-нибудь перечитаю, а пока еше один вопрос, не по теме конечно но всё же

Существуэт ли возможност обрезать String в JavaScript??
Например у меня есть var string = "Bonn, Haupt str";
И мне надо отдель взять "Bonn" и отдельно "Haupt str".
Логично что кол-во букв каждого значения будет изменятся но это не суть.
Главное щас узнать возмож но ли это в JavaScript. Поискал по инету не нашел.

Если нет то будем обрезать в php.

Kolyaj 13.03.2009 14:26

Цитата:

Сообщение от konstantinopol
Существуэт ли возможност обрезать String в JavaScript??

Существует.


Часовой пояс GMT +3, время: 02:52.