Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.03.2009, 11:43
Аспирант
Отправить личное сообщение для konstantinopol Посмотреть профиль Найти все сообщения от konstantinopol
 
Регистрация: 11.03.2009
Сообщений: 83

Глобальная переменная, считать правильнае значение в функции
Есть код:
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 - глобальная переменная.
Ответить с цитированием
  #2 (permalink)  
Старый 13.03.2009, 11:53
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

После окончания перебора значением переменной является "Bergisch Gladbach" (последний элемент массива). Если больше нигде переменной не присваивается новое значение, то результат будет неизменным.
Ответить с цитированием
  #3 (permalink)  
Старый 13.03.2009, 11:58
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

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

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

Последний раз редактировалось Shasoft, 13.03.2009 в 12:03.
Ответить с цитированием
  #4 (permalink)  
Старый 13.03.2009, 12:03
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

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

попробуйте обернуть addClubToMap в качестве параметра в замыкание, используя другое имя для хранения адреса
почитайте про замыкания,в особенности эту часть статьи
PS alert(address); - это надеюсь опечатка, при перенесении на форум
Ответить с цитированием
  #5 (permalink)  
Старый 13.03.2009, 12:04
Аспирант
Отправить личное сообщение для konstantinopol Посмотреть профиль Найти все сообщения от konstantinopol
 
Регистрация: 11.03.2009
Сообщений: 83

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

Мне нужен тот адрес(город) который прошел проверку через if().
Ответить с цитированием
  #6 (permalink)  
Старый 13.03.2009, 12:06
Аспирант
Отправить личное сообщение для konstantinopol Посмотреть профиль Найти все сообщения от konstantinopol
 
Регистрация: 11.03.2009
Сообщений: 83

Щас почитаем, спасибо.
Я ещё напишу, не раchодитесь
Ответить с цитированием
  #7 (permalink)  
Старый 13.03.2009, 14:05
Аспирант
Отправить личное сообщение для konstantinopol Посмотреть профиль Найти все сообщения от konstantinopol
 
Регистрация: 11.03.2009
Сообщений: 83

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

Gvozd тоже спасибо за ценную информацию.
Ответить с цитированием
  #8 (permalink)  
Старый 13.03.2009, 14:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

пожалуйста.
советую,если появится свободное время, перечитать весь цикл статей на этом сайте.
их не так уж много, но они очень полезные
Ответить с цитированием
  #9 (permalink)  
Старый 13.03.2009, 14:14
Аспирант
Отправить личное сообщение для konstantinopol Посмотреть профиль Найти все сообщения от konstantinopol
 
Регистрация: 11.03.2009
Сообщений: 83

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

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

Если нет то будем обрезать в php.
Ответить с цитированием
  #10 (permalink)  
Старый 13.03.2009, 14:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоить значение результату функции... Дроздов Общие вопросы Javascript 2 07.03.2009 21:42
Как вывести на экран значение функции SELECT MAX(id) Владдд Серверные языки и технологии 3 25.01.2009 16:07
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25