w jaki sposób przekazać wartość z jednej funkcji do drugiej

0

pierwsza funkcja to



       function wczytajPolilinie()
			{
				  $.ajax({
       type: "GET",
       url: "pobierzjson.php",
       dataType: 'xml',
       success: function(xmlData)
				{ 
                  var xml = xmlData;
					var polilinie = xml.getElementsByTagName("polilinia");
					for(var i=0; i<polilinie.length; i++)
					{
						var punkty	= polilinie[i].getElementsByTagName("punkt");
						var wierzcholki = [];
                     
						for(var j=0; j<punkty.length; j++)
						{
							var lat		= parseFloat(punkty[j].attributes.getNamedItem("szer").nodeValue);
							var lon		= parseFloat(punkty[j].attributes.getNamedItem("dl").nodeValue);
							var latlng	= new google.maps.LatLng(lat,lon);
							wierzcholki.push(latlng);

 



						}
                                
             
						dodajPolilinie(wierzcholki);
                       setTimeout('wczytajPolilinie()', 5000);
					}
					//alert('Wczytano '+polilinie.length+' polilinii z pliku pobierzjson.php');
				}
                  });
			}
				var	dystans;
			function dodajPolilinie(wierzcholki)
			{
				var polilinia = new google.maps.Polyline(
					{
						path: 			wierzcholki,
						strokeColor:	'<?php echo $color;?>',
						strokeOpacity:	0.5,
						strokeWeight:	3,
						fillColor:		'#EAEAEA',
						fillOpacity:	0.1,
						map: gmap
					}
				); 
					
                   google.maps.event.addListener(gmarker, 'click',
                   function ()
				{
					var obwod = google.maps.geometry.spherical.computeLength(polilinia.getPath());
                    alert("polyline is "+(obwod/1000).toFixed(1)+" long");
				
               
				});
                return  polilinia;


			}
  

W powyższym kodzie jest jest

  alert("polyline is "+(obwod/1000).toFixed(1)+" long");

i to on mnie interesuje
druga funkcja to

 function createGMap() {
	

    
    var dymek = new google.maps.InfoWindow();

    wczytajPolilinie();
	


	 var geocoder = new google.maps.Geocoder();
	 var latLng = new google.maps.LatLng(lat, lon);
   geocoder.geocode({
      latLng: latLng
    },
    function (responses) {
    if (responses && responses.length > 0)
    {
   Realaddrreess = (responses[0].formatted_address);
	  
    } else {
      alert('Cannot determine address at this location.');
    }
	
  });

              

				
    google.maps.event.addListener(gmarker, "click", function(e) {
  
     
    
        dymek.setContent('<color:green;><strong>' +  name + '</strong></color><br/>Pozycja:<br>szerokość:' + lat + '<br>długość :' + lon + '<br/>pozycja z dnia : ' + dte + '<br> Adres: <br><strong>' + Realaddrreess +'</strong>' + dystans +'');
dymek.setPosition(new google.maps.LatLng(lat, lon));
dymek.open(gmap);
    
    });
}

w powyższej funkcji jest

      dymek.setContent('<color:green;><strong>' +  name + '</strong></color><br/>Pozycja:<br>szerokość:' + lat + '<br>długość :' + lon + '<br/>pozycja z dnia : ' + dte + '<br> Adres: <br><strong>' + Realaddrreess +'</strong>' + dystans +'');   
///i tutaj jest wartość która sam nazwałem "dystans"

pytanie brzmi : w jaki sposób przenieść
1 wartość z alert , w pole dymek.setContent w miejsce "dymek" , gdzie alert to nie moze być alert , tylko zwykły tekst który się wyświetla po kliknięciu w marker

  • dodam ze próbuję już tydzień i echo , sam alert się wyświetla jako alert tylko ja spróbuję zmienić na
   dystans = ("polyline is "+(obwod/1000).toFixed(1)+" long");

to nic to nie daje w polu dystans wyświetla się napis "undefined" , tak wiem znaczy trzeba zdefiniować , tylko jak :( .
2 w jaki sposób zrobić , aby w

    dymek.setContent('<color:green;><strong>' +  name + '</strong></color><br/>Pozycja:<br>szerokość:' + lat + '<br>długość :' + lon + '<br/>pozycja z dnia : ' + dte + '<br> Adres: <br><strong>' + Realaddrreess +'</strong>' + dystans +'');   

color dawał jakiś kolor , bo strong i
działa bez zarzutu , tylko koloru jakoś nie mogę przypisać ;
dla kogoś kto zna się na tym jest to proste , dla mnie spędza sen z powiek :(

0

Ad.1 Jasz tam asynchroniczne zapytanie, to przekaż funkcję którau żywa potrzebnej wartości jako callback, jeśli tam jest synchroniczny kod to po prostu zrwóć ta wartość z funkcji.
Ad.2 <color:green;> - nie ma czgoś takiego w html - poczytaj o CSS.

Ogólnie kod jest bardzo słabej jakości, nawet nie chce mi się analizować co robi:

  • funkcja powinna mieć tylko jedną odpowiedzialność, najlepiej jak operuje tylko na przekazanych parametrach,
  • nie powinienes stosować globali,
  • formatuj poprawnie kod - zainstaluj jakiegoś lintera.

Jak chcesz lepszej odpowiedzi to popraw kod według powyższyc punktów.

0

nie potrzebuję lepszej odpowiedzi potrzebuję rozwiązania problemu , a problem jest jak wyżej . nie potrzebuję zmieniać tego kodu ani go czyścić , potrzebuję tylko przenieść alert do drugiej funkcji , dla kogoś kto ma pojęcie wie jak to zrobić , dla kogoś , kto nie ma pojęcia ,będzie szukał dziury w całym . nie potrzebujesz wiedzieć co ten kod robi , bo to nie dotyczy ciebie nie udzielaj się jak nie masz pojęcia , albo blade , skoro coś działa to znaczy ,że działa . jeśli umieszczę kod w innym miejscu , nie działa i tyle , jeśli jesteś taki mądry to to zrób.
A swoją drogą to znalazłem takie rozwiązanie ,że
ustawiłem globalną

  var  dystans; 

i zmieniłem ten kawałek z alertem na

 		
                   google.maps.event.addListener(gmarker, 'click', function ()
				{
				var	 obwod = google.maps.geometry.spherical.computeLength(polilinia.getPath());
               
                  dystans = ((obwod/1000).toFixed(1));
             (dystans);   
         
				});

i w ten sposób w drugiej funkcji jest taka linijka

    google.maps.event.addListener(gmarker, "click", function(e) {
  

    
        dymek.setContent('<span class="green">' +  name + '</span><br>szerokość:' + lat + '<br>długość :' + lon + '<br/>pozycja z dnia : ' + dte + '<br> Adres: <br><strong>' + Realaddrreess +'</strong>' + '<br>Dzisiaj przebyto ' + dystans +' km <br>');
dymek.setPosition(new google.maps.LatLng(lat, lon));
dymek.open(gmap);
        
    });

tylko ,że teraz jak kliknę w markera "gmarker" to za pierwszym razem wyświetla się

 Dzisiaj przebyto undefined km 

natomiast jak kliknę drugi raz to wyświetla się np

 Dzisiaj przebyto 14,3 km 

czy ktoś zna moze przyczynę tego undefined ??

acha i z colorem sobie poradziłem wystarczyło wcześniej tylko zmienić
z

 dymek.setContent(gmarker.txt);

na

 dymek.setContent(gmarker.innerHTML);

i resztą już zajęły się style.css

0

Gdybyś przeanalizował moją odpowiedź zamiast mnie obrażać, to być może zorienotowałbyś się, że rozwiązanie problemu masz w pierwszym zadaniu (o ile znasz podstawy JSa). Twój kod jest kiepski, pogódź się z tym, nie jest moim obowiązkiem jego analiza, poświęcam tyle czasu ile chcę / mogę. To Tobie powinno zależeć na jak najlepszym przedstawieniu problemu, bez zbędnych elementów. Mi to rybka, wolisz zjechać merytoryczną odpowiedź - no trudno, jak komuś brakuje kultury to ma ciężej w życiu.

0

nie zależy mi na retorycznej odpowiedzi , bo tylko na rozwiązaniu problemu . próbowałem już zwrócić tę wartość i nic to nie dało więc nie jest to najlepsze rozwiązanie . Chyba ze coś robię źle . gdybym znał podstawy js to nie prosił bym o pomoc na forum , tylko zajrzał bym do tysięcy innych poradników , jednak pomimo tego że one istnieją i tak nie przemawiają do mnie w żaden sposób . Gdybyś zechciał podać rozwiązanie to nie poczułbyś się obrażany w żadne sposób , a jak słyszę o merytorycznych wypowiedziach to kojarzą mi się od razu pajace z sejmu więc sorry nie tędy droga kolego , nie masz zamiaru pomóc nie udzielaj się proszę nie wiesz co robi kod nie udzielaj się proszę , bo ja jako laik nie znający podstaw zanim go przeniosłem do swojego użytku po tysiąc kroć go przeanalizowałem i tak się składa ,ze wiem co on robi . funkcja pobiera dane z pliku json , następnie na podstawie danych rysuje linie w czasie rzeczywistym na mapie google , drugi element " dymek" jest w funkcji która tworzy mapę google i jest to oczywiste nie trzeba tego analizować zeby do tego dojść . dla kogoś kto NIE MA pojęcia widzi to w ten sposób pierwsza funkcja pobiera dane co jakiś czas i przetwarza je w coś tam , w tym przypadku w linie , na podstawie danych oblicza odległość pobierając współrzędne , i po dodatkowych obliczeniach wyświetla je w postaci "liczba km". jest to pełna funkcja i jeśli uważasz że to zupa to z pretensjami do google , ponieważ cała ta funcja działa na podstawie google map.js i tam jest podany wzór jak to zrobić żeby to tak działało i inaczej wbrew twojej woli nie będzie działać . mnie natomiast chodziło o przeniesienie tego tekstu , a nie o merytoryczne wypowidzi , jak będę chciał posłuchać merytoryki to sobie włącze obrady sejmu

0

Lol co za typ.

Jak jestes mądrzejszy od nas i wiesz lepiej że piszesz dobrze to po co w ogóle piszesz ?

Przejdź do Ogłoszenia drobne i zapłać jak należy jak chcesz żeby ktoś analizował i poprawiał ten syf.

0

Posłuchaj kolego zadałem proste pytanie , ponieważ potrzebuję odpowiedzi , a raczej rozwiązania sądziłem ze ktoś się zna na tym i zna prostą odpowiedź jeżeli wiedział bym jak przeanalizować , poprawić ten syf jak to nazywacie to nie prosiłbym o pomoc , jeżeli bym wiedział jak brzmi rozwiązanie to nie szukałbym pomocy tutaj , wy natomiast potraficie tylko wytykać błędy , natomiast pomocy żadnej i się potem dziwicie że można kogoś wytrącić z równowagi , a można uwierz mi , bo jeśli ktoś ma pojęcie to mu to zajmie raptem 10 minut , a jak ktoś pojęcia nie ma to i tydzień nie wystarczy .nie staram się być mądrzejszy od nikogo ale postaraj się zrozumieć ,że skoro o coś pytam to znaczy ze czegoś nie wiem i jeśli coś tak wygląda to znaczy że nie wiem jak ma poprawnie wyglądać i zapewne jak by poprawnie wyglądało problemu by nie było , jednak javascript jest językiem niezrozumiałym dla mnie do końca , obszerna literatura nie przemawia do mnie w żaden sposób. zapytałem tylko jak przenieść ten alert i wyświetlić jako tekst w innym miejscu , a ty mi proponujesz żebym dał ogłoszenie drobne i zapłacił , nie bądź śmieszny , bo to text rodem z gimnazjum .

1

Po 1 Nie przypominam sobie żebyśmy byli kolegami.
Po 2 To tobie powinno zależeć na rozwiązaniu problemu a obrażająć innych i mądrząc się raczej nie zachęcasz żeby ktoś pomógł Ci.
Po 3 Twoim problemem nie jest alert tylko to, że nie umiesz programować (jak nie umiesz to po cholere zabierasz się za fuchy), kolega podaje ci wskazówki jak twój kod powinien wyglądać, po to że jak zobaczysz ten "kod" za miesiąc żebyś nie musiał analizować od początku i dlatego Ogłoszenia drobne to twoje najlepsze wyjście tam możesz płacić i żądać.
Po 4 Nie umiesz czytać (i pisać też) bo rozwiązanie masz już podane Ad.1 Jak dasz tam asynchroniczne zapytanie, to przekaż funkcję która używa potrzebnej wartości jako callback, jeśli tam jest synchroniczny kod to po prostu zwróć ta wartość z funkcji.

A jak nie rozumiesz to googluj / płać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1