Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ajax - Parse Json

Aktivity
Avatar
Bebeno
Člen
Avatar
Bebeno:4.1.2018 15:27

Ahojte opat. Dufam ze je to ok ked zakladam dalsie vlakno ale opat Vas chcem poziadat o radu a to y ineho sudka.
Citam stranky pouzivam navody ale nie nie docielit vysledok.

Potrebujem rozloyit data prijate z databazy vo forme Json. ked si cisto nacitam php tak toto je vysledok.

{lat

Ale ked sa snazim pomocou kodu v JS vypisat na stranke hodnotu lat tak mi tam len napise undefined.

Toto je moj kod.

function update() {
                                                $.ajax({
                                                                        type: 'GET',
                                                                        url: 'php/gpstracker/update_data_tracker.php',
                                                                        dataType: 'json',
                                                                        success: function(response) {
                                                                                var update = jQuery.parseJSON(response);
                                                                        }
                                                                });

                                                document.getElementById("demo").innerHTML = update.lat;

                                        }

vopred Dakujem za cenne rady.

 
Odpovědět
4.1.2018 15:27
Avatar
Bebeno
Člen
Avatar
Odpovídá na Bebeno
Bebeno:4.1.2018 16:35

Ten vysledok ktory mam z PHP suboru prikladam este raz.

{"lat":47.2345,"lng":16.1268,"speed":56,"feet":2300,"heading":200,"inuse":1,"type":"OM-NRB"}
 
Nahoru Odpovědět
4.1.2018 16:35
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Bebeno
Honza Bittner:4.1.2018 17:45

Problém je v tom, že ten AJAX se IMO nespustí synchronně. Spustí se nezávisle na zbytku funkce, a tedy se nejdříve vykoná část document.getElementById("demo").innerHTML = update.lat; a až poté callback co se ti zavolá při odpovědi ze serveru $.ajax({....

Správně tedy musíš pracovat nějak takto (prostě zpracovat všechno v tom daném callbacku):

function update() {
        $.ajax({
                type: 'GET',
                url: 'php/gpstracker/update_data_tracker.php',
                dataType: 'json',
                success: function(response) {
                        var update = jQuery.parseJSON(response);
                        document.getElementById("demo").innerHTML = update.lat;
                }
        });
}
Editováno 4.1.2018 17:46
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
4.1.2018 17:45
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Bebeno
Člen
Avatar
Odpovídá na Honza Bittner
Bebeno:4.1.2018 19:00

Ahoj. Presne potom som na to priesiel. Uz mi to funguje. pracujem na Online GPS trackery pre lietanie. Potreboval som este vhodnocavat ci let skoncil aby mi odstranilo potom marker ked let skonci a moj vysledok je takto.
co hovori na to oko skusenejsich?

function update() {
                                                        $.ajax({
                                                                type: 'GET',
                                                                url: 'php/gpstracker/update_data_tracker.php',
                                                                dataType: 'json',
                                                                success: function(response) {

                                                                var update = jQuery.parseJSON(response);
                                                                                        //console.log(response.speed);
                                                                updateLat = response.lat;
                                                                updateLng = response.lng;
                                                                updateSpeed = response.speed;
                                                                updateFeet = response.feet;
                                                                updateHeading = response.heading;
                                                                updateInuse = response.inuse;

                                                                if (updateInuse == 1) {
                                                                        document.getElementById("lat").innerHTML = updateLat;
                                                                        document.getElementById("lng").innerHTML = updateLng;
                                                                        document.getElementById("speed").innerHTML = updateSpeed;
                                                                        document.getElementById("feet").innerHTML = updateFeet;
                                                                        document.getElementById("heading").innerHTML = updateHeading;
                                                                        }
                                                                else {
                                                                        document.getElementById("lat").innerHTML = 0;
                                                                        document.getElementById("lng").innerHTML = 0;
                                                                        document.getElementById("speed").innerHTML = 0;
                                                                        document.getElementById("feet").innerHTML = 0;
                                                                        document.getElementById("heading").innerHTML = 0;
                                                                        }
                                                                }
                                                });

                                                        if (updateInuse == 1) {
                                                        var path = flightPath.getPath();
                                                                path.push(new google.maps.LatLng(updateLat,updateLng));
                                                                flightPath.setPath(path);
                                                        var latlng = new google.maps.LatLng(updateLat,updateLng);
                                                                marker.setPosition(latlng);
                                                        }
                                                        else marker.setPosition(null);
                                                }
 
Nahoru Odpovědět
4.1.2018 19:00
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Bebeno
Honza Bittner:4.1.2018 19:59

Zase nemáš všechno v té success funkci. Dej to všechno dovnitř a mělo by to být +- ok.

Může se zdát, že to funguje stejně i takto, avšak jelikož nepoužíváš u některých proměnných var, tak se nastavují jako globální proměnné ("If you're in a function then var will create a local variable, "no var" will look up the scope chain until it finds the variable or hits the global scope (at which point it will create it):" viz https://stackoverflow.com/…0494/3281252) a máš tak data spožděná o jedno volání funkce a vůbec bych na to nespoléhal. Tj. ideálně všude používat var a vše mít v tom té funkci success.

Btw. na hodně věcí si vytváříš proměnnou zbytečně (používáš jí pak jen na jednom místě), ale to až tak nevadí, pokud ti to pomůže zpřehlednit kód. :-)

Editováno 4.1.2018 19:59
Nahoru Odpovědět
4.1.2018 19:59
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Bebeno
Člen
Avatar
Odpovídá na Honza Bittner
Bebeno:4.1.2018 20:07

Noo posluchol som ta a dal som to vsetko do success funkcie, teda tu cas spodnu ktora dokresli novy patch a zmeni polohu markeru ale potom to nefunguje.

Dal som to spat ako som to mal a ide to.

Dakujem

 
Nahoru Odpovědět
4.1.2018 20:07
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Bebeno
Honza Bittner:4.1.2018 20:12

Říkáš, že takto to nefunguje?

function update() {
    $.ajax({
        type: 'GET',
        url: 'php/gpstracker/update_data_tracker.php',
        dataType: 'json',
        success: function(response) {
            var update = jQuery.parseJSON(response);

            //console.log(response.speed);
            var updateLat = response.lat;
            var updateLng = response.lng;
            var updateSpeed = response.speed;
            var updateFeet = response.feet;
            var updateHeading = response.heading;
            var updateInuse = response.inuse;

            if (updateInuse == 1) {
                document.getElementById("lat").innerHTML = updateLat;
                document.getElementById("lng").innerHTML = updateLng;
                document.getElementById("speed").innerHTML = updateSpeed;
                document.getElementById("feet").innerHTML = updateFeet;
                document.getElementById("heading").innerHTML = updateHeading;

                var path = flightPath.getPath();
                path.push(new google.maps.LatLng(updateLat,updateLng));
                flightPath.setPath(path);
                var latlng = new google.maps.LatLng(updateLat,updateLng);
                marker.setPosition(latlng);
            }
            else {
                document.getElementById("lat").innerHTML = 0;
                document.getElementById("lng").innerHTML = 0;
                document.getElementById("speed").innerHTML = 0;
                document.getElementById("feet").innerHTML = 0;
                document.getElementById("heading").innerHTML = 0;

                marker.setPosition(null);
            }
    });
}
Nahoru Odpovědět
4.1.2018 20:12
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Bebeno
Člen
Avatar
Odpovídá na Honza Bittner
Bebeno:4.1.2018 21:53

Musim sa ospravedlnit. Ano mal si pravdu. ja som tam zazmatkoval niekde so zatvorkami a robilo mi to hluposti potom.

Uz to mam vsetko v kope.

Ale ked sme sa rozpisali opytal by som sa este nieco.

Ten PHP subor by som potrebalo nacitat hned u uvode stranky, v headeri. Lenze tan vracia hodnoty cey ECHO a robi mi to potom to ze v menu liste ktoru mam na vrchu mi vypise tie vratene hodnoty.

Da sa to nejako vyriesit?

Dakujem

 
Nahoru Odpovědět
4.1.2018 21:53
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Bebeno
Honza Bittner:4.1.2018 22:33

V pohodě. ;)

Hmm, asi nějak nechápu, co přesně chceš vysvětlit.

Nahoru Odpovědět
4.1.2018 22:33
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Hando
Člen
Avatar
Odpovídá na Bebeno
Hando:4.1.2018 23:03

Proč potřebuješ načítat php soubor někdy jindy, než v okamžiku, kdy si ho ajax sám zavolá? Pouze poskytuje data, do head sekce jiné stránky nepatří.

 
Nahoru Odpovědět
4.1.2018 23:03
Avatar
Bebeno
Člen
Avatar
Odpovídá na Hando
Bebeno:5.1.2018 10:44

Pokusim sa to vysvetlit. Pisem cez phone tek nevie momentalne pridat moj kod pre lepsie pochopenie.
Ja som zaciatocnik a co doteraz viem tak vychadzam iba z toho co som cital a ako som to pochopil.
Mam stranku kde chcem sledovat online aktualnu polohu lietadla pocas letu. Postavil som si zariadenie ktore mi posiela cez gsm siet data do databazy.
No a stranku sa snzaim spravit trocha zaujimavu a to tak ze napriklad pri prvom nacitani si najskor zisti nazov poslednej tabulky, potom z tej tabulky zisti ci hodnota "inuse"je 0 alebo 1. Podla toho sa stranka sprava. Ak je 1 tak stranku nacita tak ze aj do google mapy zakresli polyline a vypise aktualne inFo o lete (rychlost, vysku .....).
Ak je hodnota 0 tak sa len nacita mapa a v zahlavi stranky sa vypise text ze aktualne ziadny let neprebiaha.

No a na to potrebujem tuto hodnotu ziskavat. Zatial to mam spravene tak ze pre tento uvod mam php subor ktory zisti hodnotu a ulozi ju do premennej $inuse ktora je v tom php. Nasledne ju v html testujem . Ten php mi dava presne rovnake vysledy ako php subor ktory volam cez ajax v tej casti ktoru sme doteraz riesili. A toto mi pride hlupost aby som mal dva podobne subory php. Lenze ten subor ktory volam cez ajax je napisany tak ze ked ho dam exekuovat tak na stranke vypise vysledny json retazec. Ak by som ho chcel pouzit aj pri prvotnom nacitani stranky pre zistenie hodnoty inuse tak ho musim includnut do html suboru. No a ked som to tak spravil tak v hornej casti stranky, tam kde ja mam menu listu mi ten json retazec vypise.

Preto by som potreboval poradit ako sa z toho vymotat, aby som pouzival iba jeden php subot (ten co volam aj pomocou ajax ) ale aby mi to nevpisovalo vysledny json retazec ako text do stranky.

Ak som to zle vysvetlil tak navecer mozem zaslat cely moj kod pre lepsie pochopenie.

Dakujem

 
Nahoru Odpovědět
5.1.2018 10:44
Avatar
Hando
Člen
Avatar
Hando:5.1.2018 12:22

Jestli jsem to dobře pochopil, tak máš víceméně několik možností. Netuším, jak máš členěnou výslednou stránku, jestli jdeš cestou MVC (což hádám že ne) atd.

1.) Ten soubor, který ti poskytuje data, můžeš rozvětvit tak, že mu předáš v proměnné info, jaký typ výsledku si přeješ.
update_data_trac­ker.php?data=json nebo např. update_data_trac­ker.php?data=i­nUse a podle použití si jej zavoláš. V jednom případě si necháš vrátit data pro gmap polyline, v druhém pouze info, zda někde něco létá.
2.) Nechat normálně projet stránku tak, jak to máš do teď a po zpracování ajaxu otestovat, zda existuje vrácený json (případně má rozumné údaje) a přepsat podle toho předchozí část stránky (což má svoje úskalí např. v tom, že může uživatel dobu čumět na chybný obsah). To bych asi úplně nedoporučoval.
3.) Vůbec neřešit použití externího php souboru, ale už před vykreslováním stránky si zjistit, zda (inUse == 1) přes dotaz na databázi a podle toho vykreslovat zbytek - např. vůbec nenačítat gmapu, nespouštět ajax apod. Toto mi připadá nejspolehlivější a pokud nemáš problém s tím, že se ti bude v html motat kód pro php, tak bych to vyřešil takto. Na jednoduchou stránku to není špatně a pro větší projekt to stejně budeš řešit asi celé jinak. :)

 
Nahoru Odpovědět
5.1.2018 12:22
Avatar
Bebeno
Člen
Avatar
Odpovídá na Hando
Bebeno:5.1.2018 19:32

Dakujem za reakciu Hando.No ak ta dobre chapem tak odporucas mi upravit si PHP pre dva moyne situacie. OK to by som mal zvladnut.

Ale potom Pri nacitani stranky na zaciatku ho treba opat volaj cez ajax? Aby som dostal hodnotu Inuse?

Pre istotu prikladam aj kod v subore. Proste chcem odstranit tie PHP echa a nahradit ich premennymi ktore pouzivam v sekcii ajax.

musite mat so mnou trpezlivost. ucim sa za pochodu 3 jazyky naraz . HMTL, PHP, JS tak ma to trosku pletie ale nie som zase nechapavy :-)

Dakujem

<!DOCTYPE html>
<html lang="sk">

        <head>
                <meta charset="utf-8" />
                <meta name="keywords" content="Arduino, GPS , tracker" />
                <meta name="author" content="Ivan" />
                <link rel="shortcut icon" href="obrazky/ikona.ico" />
                <link rel="stylesheet" href="styl.css" type="text/css" />

                <?php include_once 'php/visitors_log.php';?>
                <?php include_once 'php/gpstracker/last_table_tracker.php';?>
                <?php include_once 'php/gpstracker/last_data_tracker.php';?>


                <style>
                           #map {
                                height: 400px;
                                width: 100%;
                                box-shadow: 2px 2px 10px #1c2228;
                           }
                </style>

                <title>GPS-tracker</title>

                <script src="js/jquery-1.7.2.min.js"></script>
                <script src="js/google_map_tracker.js"></script>
                <script async defer
                src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDynka_aNgQEG0O4V1U4Oo5WmVoDjNJ7Rc&language=sk&callback=initMap">
                </script>

        </head>

        <body>
                <header>
                        <div id="logo"><h1>Ivanwebserver</h1></div>
                        <nav>
                                <ul>
                                        <li><a href="index.php">Domov</a></li>
                                        <li><a href="usokolika.php">U sokolíka</a></li>
                                        <li class="aktivni" ><a href="lietanie.php">Lietanie</a></li>
                                        <li><a href="arduino.php">Arduino</a></li>
                                        <li><a href="pic.php">PIC-Microchip</a></li>
                                </ul>
                        </nav>
                </header>

                <article>
                        <div id="centrovac">
                                <header>
                                        <h1>GPS-tracker</h1>
                                        <iframe src="http://free.timeanddate.com/clock/i61ef16y/n136/szw110/szh110/hoc09f/hbw0/hfc09f/cf100/hnce1ead6/hwc000/fas30/fdi66/mqc000/mql15/mqw4/mqd98/mhc000/mhl15/mhw4/mhd98/mmc000/mml10/mmw1/mmd98/hhs2/hms2/hss3"
                                        frameborder="0" width="110" height="110"></iframe>
                                </header>

                                <section>
                                <h2>Online GSP tracker</h2>

                                <p style="font-size:160%" id="inuse"></p>
                                <script>
                                if(<?php echo $inuse ?> == 0){   // zistuje ci je posledny let stale aktivny aby vypisal text.
                                // Toto budem este upravovat. Aby boli dve verzie textu


                                document.getElementById("inuse").innerHTML = "Aktuálne neprebieha žiadny let";}
                                </script>

                                <p>Môj vlastný online GPS tracker funguje cez mobilnú GPRS sieť preto sa sen tam môže stať že nastane krátky výpadok
                                odosielania dát, hlavne pokiaľ letím nad horami kde ten signál je predsa len slabší.</p>
                                        <p>Počas letu odosielam nasledovné data.</p>
                                <ul style="list-style-type:circle">
                                        <li>Zemepisná šírka (Latitude)</li>
                                        <li>Zemepisná dĺžka (Longtitude)</li>
                                        <li>Rýchlosť udávaná v knotoch (1 knot = 1.852 km/h)</li>
                                        <li>Nadmorská výška udávaná v stopách (1 feet = 0.3048 m) výška voči hladine mora !</li>
                                        <li>Magnetický smer udávaný v stupňoch (heading)</li>
                                        <li>Registračná značka lietadla</li>
                                </ul><br>

                                <table class="update" align="center">
                                        <tr>
                                        <th class="update">Zem.šírka</th>
                                        <th class="update">Zem.dĺžka</th>
                                        <th class="update">Rýchlosť</th>
                                        <th class="update">Výška</th>
                                        <th class="update">Smer</th>
                                        </tr>
                                        <tr>
                                        <td class="update" id="lat">-</td>
                                        <td class="update" id="lng">-</td>
                                        <td class="update" id="speed">-</td>
                                        <td class="update" id="feet">-</td>
                                        <td class="update" id="heading">-</td>
                                        </tr>
                                </table>
                                <br>

                                <div id="map"></div>
                                <script>
                                if(<?php echo $inuse ?> == 1) {  // Kontrola ci je let stale aktivny pre
                                        function initMap() {
                                        var myLatLon = {lat: <?php echo $lasLan ?>, lng: <?php echo $lasLon ?>};
                                        var map = new google.maps.Map(document.getElementById('map'), {
                                                zoom: 7,
                                                center: myLatLon,
                                                mapTypeId: 'terrain'
                                        });
                                        var flightPlanCoordinates = JSON.parse('<?php include 'php/gpstracker/json_data.php';?>');

                                        var flightPath = new google.maps.Polyline({
                                                path: flightPlanCoordinates,
                                                geodesic: true,
                                                strokeColor: '#FF0000',
                                                strokeOpacity: 1.0,
                                                strokeWeight: 2
                                                });
                                        flightPath.setMap(map);

                                        var marker = new google.maps.Marker({
                                                position: myLatLon,
                                                // icon: {      url: "obrazky/plane.png",
                                                // scaledSize: new google.maps.Size(30, 30)},
                                                map: map,
                                                title:'<?php echo $type ?>',
                                                draggable: true,
                                                animation: google.maps.Animation.DROP,
                                        });

                                        var myVar = setInterval(function(){ update() }, 5000);
                                        function update() {
                                                        $.ajax({
                                                                type: 'GET',
                                                                url: 'php/gpstracker/update_data_tracker.php',
                                                                dataType: 'json',
                                                                success: function(response) {

                                                                var update = jQuery.parseJSON(response);
                                                                                        console.log(response.inuse);
                                                                var updateLat = response.lat;
                                                                var updateLng = response.lng;
                                                                var updateSpeed = response.speed;
                                                                var updateFeet = response.feet;
                                                                var updateHeading = response.heading;
                                                                var updateInuse = response.inuse;

                                                                 document.getElementById("lat").innerHTML = updateLat;
                                                                 document.getElementById("lng").innerHTML = updateLng;
                                                                 document.getElementById("speed").innerHTML = updateSpeed + " knt";
                                                                 document.getElementById("feet").innerHTML = updateFeet + " feet";
                                                                 document.getElementById("heading").innerHTML = updateHeading + " °";

                                                                if (updateInuse == 1) {
                                                                        var path = flightPath.getPath();
                                                                                path.push(new google.maps.LatLng(response.lat,response.lng));
                                                                                flightPath.setPath(path);
                                                                        var latlng = new google.maps.LatLng(response.lat,response.lng);
                                                                                marker.setPosition(latlng);
                                                                        }
                                                                else {
                                                                        marker.setPosition(null);
                                                                        }
                                                                }
                                                        });
                                                }
                                        }
                                }
                                </script>

                                <p text-align="left"><cite> Poznámka: Pre priblíženie náhľadu v mape pomocou kolieska na myši držte súčasne aj pravé tlačítko myši</p><br>
                                <br>

                                <h2> História letov</h2>

                                <table class="table" width="700px" align="center">
                                <tr>
                                <th width="100" class="table">Dátum letu</th>
                                <th width="100" class="table">Registračka</th>
                                <th class="table">Poznámka</th>
                                </tr>
                                                <?php
                                                        $conn=mysqli_connect('localhost','' ,'','gps_tracker');
                                                        $sql = "SELECT table_name FROM information_schema.TABLES WHERE table_schema = 'gps_tracker'";
                                                        $resultTables = $conn->query($sql);

                                                        while ($row = mysqli_fetch_assoc($resultTables)){
                                                                $table = $row['table_name'];
                                                                        echo '<tr>';
                                                                        echo '<td class="table">'.'<a href="gpstracker_history.php?tab='.$table.'">'.$row['table_name'].'</a>'.'</td>';
                                                        $sql = "SELECT `type`,`notice` FROM `$table` ORDER BY id DESC LIMIT 1";
                                                        $resultType = $conn->query($sql);
                                                                $row2 = mysqli_fetch_assoc($resultType);
                                                                        echo '<td class="table">'.$row2['type'].'</td>';
                                                                        echo '<td class="table">'.$row2['notice'].'</td>';
                                                                        echo '</tr>';
                                                                }
                                                        mysqli_close($conn);
                                                ?>
                                </table>



                                <br>
                                <a href="lietanie.php"/>
                                <img src="obrazky/back_icone.png" alt="back_icone" align="right">
                                </a>


                                </section>
                                <div class="cistic"></div>
                        </div>
                </article>


                <footer>

                </footer>
        </body>
</html>
 
Nahoru Odpovědět
5.1.2018 19:32
Avatar
Bebeno
Člen
Avatar
Odpovídá na Bebeno
Bebeno:10.1.2018 16:04

Ahojte priatelia.Ja už naozaj neviem co robím zle.

Prepísal som celý kod pre Google mapu ( posledný moj príspevok) tak aby som nepoužíval aj PHP ale len JS.
Vsetko mi ide až na jednu čast a to posun Markeru a dokreslenie polyline.

ked si porovnate obydva kody tak su strukturovo skoro rovnake ale v tejto novej verzii mi stale data chybu
gpstracker.php:167 Uncaught TypeError: Cannot read property 'getPath' of undefined

a ja ani za toho pana neviem prist na to prečo.

V tej prvej verzii mi to krasne fungovalo.

Dakujem

Moj kod.

function initMap() {
                                                var map = new google.maps.Map(document.getElementById('map'), {
                                                          zoom: 7,
                                                          center: {lat: 48.40, lng: 19.41},   // stred Slovenska
                                                          mapTypeId: 'terrain'
                                                        });
                                                document.getElementById("inuse").innerHTML = "Aktuálne neprebieha žiadny let";

                                                var myVar = setInterval(function(){ update() }, 1000);
                                                var firstLoad0 = false;
                                                var firstLoad1 = false;
                                                var tracking = false;

                                                function update() {
                                                                $.ajax({
                                                                        type: 'GET',
                                                                        url: 'php/gpstracker/update_data_tracker.php',
                                                                        dataType: 'json',
                                                                        success: function(response) {
                                                                                var update = jQuery.parseJSON(response);

                                                                                var updateLat = response.lat;
                                                                                var updateLng = response.lng;
                                                                                var updateSpeed = response.speed;
                                                                                var updateFeet = response.feet;
                                                                                var updateHeading = response.heading;
                                                                                var updateInuse = response.inuse;
                                                                                var updateType = response.type;



                                                                                if(updateInuse == 1 && firstLoad1 == false && tracking == false){
                                                                                        var myLatLon = {lat:updateLat, lng:updateLng };
                                                                                        var map = new google.maps.Map(document.getElementById('map'), {
                                                                                                zoom: 14,
                                                                                                center: myLatLon,
                                                                                                mapTypeId: 'terrain'
                                                                                        });
                                                                                        var flightPlanCoordinates = JSON.parse('<?php include 'php/gpstracker/polyline_json_data.php';?>');
                                                                                        var flightPath = new google.maps.Polyline({
                                                                                                path: flightPlanCoordinates,
                                                                                                geodesic: true,
                                                                                                strokeColor: '#FF0000',
                                                                                                strokeOpacity: 1.0,
                                                                                                strokeWeight: 2
                                                                                                });
                                                                                        flightPath.setMap(map);

                                                                                        var marker = new google.maps.Marker({
                                                                                        position: myLatLon,
                                                                                        // icon: {      url: "obrazky/plane.png",
                                                                                        // scaledSize: new google.maps.Size(30, 30)},
                                                                                        map: map,
                                                                                        title:updateType,
                                                                                        draggable: true,
                                                                                        animation: google.maps.Animation.DROP,
                                                                                        });

                                                                                        document.getElementById("lat").innerHTML = updateLat;
                                                                                        document.getElementById("lng").innerHTML = updateLng;
                                                                                        document.getElementById("speed").innerHTML = updateSpeed + " knt";
                                                                                        document.getElementById("feet").innerHTML = updateFeet + " feet";
                                                                                        document.getElementById("heading").innerHTML = updateHeading + " °";
                                                                                        document.getElementById("inuse").innerHTML = "Online let lietadla" + updateType ;
                                                                                        firstLoad1 = true;
                                                                                }


                                                                                if(updateInuse == 1 && firstLoad1 == true){
                                                                                        document.getElementById("lat").innerHTML = updateLat;
                                                                                        document.getElementById("lng").innerHTML = updateLng;
                                                                                        document.getElementById("speed").innerHTML = updateSpeed + " knt";
                                                                                        document.getElementById("feet").innerHTML = updateFeet + " feet";
                                                                                        document.getElementById("heading").innerHTML = updateHeading + " °";
                                                                                        document.getElementById("inuse").innerHTML = "Online let lietadla" + updateType ;
                                                                                        tracking = true;
                                                                                }

                                                                                if(updateInuse == 1 && firstLoad1 == true){
                                                                                        var path = flightPath.getPath(); // ERROR - Cannot read property 'getPath' of undefined
                                                                                                path.push(new google.maps.LatLng(updateLat,updateLng));
                                                                                                flightPath.setPath(path);
                                                                                        var latlng = new google.maps.LatLng(updateLat,updateLng);
                                                                                                marker.setPosition(latlng);
                                                                                }


                                                                                if(updateInuse == 0 && tracking == true){
                                                                                        marker.setPosition(null);
                                                                                        document.getElementById("lat").innerHTML = 0;
                                                                                        document.getElementById("lng").innerHTML = 0;
                                                                                        document.getElementById("speed").innerHTML = 0;
                                                                                        document.getElementById("feet").innerHTML = 0;
                                                                                        document.getElementById("heading").innerHTML = 0;
                                                                                        document.getElementById("inuse").innerHTML = "Let ukončený";
                                                                                }
                                                                        }
                                                });
                                        }
                                }
 
Nahoru Odpovědět
10.1.2018 16:04
Avatar
Hando
Člen
Avatar
Odpovídá na Bebeno
Hando:10.1.2018 22:51

Nemohl bys dodat odkaz na živou ukázku? Lépe by se s tím pracovalo. Pokud to tedy není nic tajného. :)

 
Nahoru Odpovědět
10.1.2018 22:51
Avatar
Bebeno
Člen
Avatar
Odpovídá na Hando
Bebeno:10.1.2018 23:00

Ahoj. Rad by som dal , nie je to tajne ale este to nemam online.

 
Nahoru Odpovědět
10.1.2018 23:00
Avatar
Bebeno
Člen
Avatar
Bebeno:11.1.2018 16:39

Tak Dakujem zatial zatial za pomoc. Chyba sa mi nakoniec podarila odstranit. Problem bol v tom ze ja som si premmenu definoval dva krat a tim padom program nevedel ziskat spravne data.

Takye vsetko funguje skoro na 100% a6 na jednu malickost ktora mi fakt lezie na nervy..
Skusim popisat co to robi a este raz prilozim finalny kod snad niekto poradi.

Ked uzivatel nacita stranku a prave neprebieha zidny let tak sa nacita len mapa pretoze premmenna uploadInuse = 0 ktora je definovana v poslednej existujucuje tabulke v databaze. Kazdych 5 sekund si preveruje tieto data.

Strranku necham otvorenu a vytvorim novy tabulku a pridam prvy riadok s hodnotami kde uploadInuse sa uz rovna 1. Ked mi prvy krat skoci do podmienky kde nacita data pre vykreslenie polyline. Spravne by malo nacitat len ten jeden novy riadok ale stane sa to ze v premmenej flightPlanCoor­dinates sa nachadzaju aj data z predposlednej tabulky a ja fakt neviem preco, lenže po refresh stranke je vsetko tak ako ma byt.

Pouzil som aj console.log pre sledovanie premmennej uploadInuse aby som sa uistil ze mi to berie data zo spravnej tabulky a robi to presne tak ako ma. Cize ak je uploadInuse = 0 tak do sekcie pre nacitanie flightPlanCoor­dinates vobec nejde. Tuto premmenu pred nacitanim aj mazem ako je vidiet z kodu.
na spodu kodu nie su vsetky zatvorky to preto lebo tam mam este jednu podmienky ale ta je pre graf takze som ju sem nedaval, berte to tak ze to je ukoncene spravne.Tam chyba urcite nie je.

Dake napady?

Prikladam aj foto kodu PHP pre ziskanie poslednej tabulky tabulky

Dakujem

function initMap() {
                                                var map = new google.maps.Map(document.getElementById('map'), {
                                                          zoom: 7,
                                                          center: {lat: 48.60, lng: 19.8},   // stred Slovenska
                                                          mapTypeId: 'terrain'
                                                        });
                                                document.getElementById("inuse").innerHTML = "Aktuálne neprebieha žiadny let";

                                                $(document).ready(function(){
                                                         update();
                                                });

                                                var refresh = setInterval(function(){ update() }, 5000);
                                                var firstLoad = false;
                                                var tracking = false;
                                                var flightPlanCoordinates = [];

                                                function update() {
                                                                $.ajax({
                                                                        type: 'GET',
                                                                        url: 'php/gpstracker/update_data_tracker.php',
                                                                        dataType: 'json',
                                                                        success: function(response) {
                                                                                var update = jQuery.parseJSON(response);

                                                                                var updateLat = response.lat;
                                                                                var updateLng = response.lng;
                                                                                var updateSpeed = response.speed;
                                                                                var updateFeet = response.feet;
                                                                                var updateHeading = response.heading;
                                                                                var     updateInuse = response.inuse;
                                                                                var updateType = response.type;

                                                                                if(updateInuse == 0 && tracking == true){  // ukoncenie letu
                                                                                        marker.setPosition(null);
                                                                                        document.getElementById("lat").innerHTML = 0;
                                                                                        document.getElementById("lng").innerHTML = 0;
                                                                                        document.getElementById("speed").innerHTML = 0;
                                                                                        document.getElementById("feet").innerHTML = 0;
                                                                                        document.getElementById("heading").innerHTML = 0;
                                                                                        document.getElementById("inuse").innerHTML = "Let ukončený";
                                                                                }
                                                                                if(updateInuse == 0 && firstLoad == false){ // prve nacitanie stranky ak let neprebieha
                                                                                        document.getElementById("inuse").innerHTML = "Aktuálne neprebieha žiadny let";
                                                                                        flightPlanCoordinates = [];
                                                                                        //console.log(flightPlanCoordinates);
                                                                                }
                                                                                        // vykreslenie polyline iba ako je let aktivny a iba pri prvom nacitani stranky ak je let aktivny
                                                                                if(updateInuse == 1 && firstLoad == false && tracking == false){
                                                                                        var myLatLon = {lat:updateLat, lng:updateLng };
                                                                                         map = new google.maps.Map(document.getElementById('map'), {
                                                                                                zoom: 14,
                                                                                                center: myLatLon,
                                                                                                mapTypeId: 'terrain'
                                                                                        });

                                                                                         flightPlanCoordinates = JSON.parse('<?php include 'php/gpstracker/polyline_json_data.php';?>');
                                                                                         console.log(flightPlanCoordinates)     ;
                                                                                         flightPath = new google.maps.Polyline({
                                                                                                path: flightPlanCoordinates,
                                                                                                geodesic: true,
                                                                                                strokeColor: '#FF0000',
                                                                                                strokeOpacity: 1.0,
                                                                                                strokeWeight: 2
                                                                                                });
                                                                                        flightPath.setMap(map);

                                                                                        marker = new google.maps.Marker({
                                                                                        position: myLatLon,
                                                                                        // icon: {      url: "obrazky/plane.png",
                                                                                        // scaledSize: new google.maps.Size(30, 30)},
                                                                                        map: map,
                                                                                        title:updateType,
                                                                                        draggable: true,
                                                                                        animation: google.maps.Animation.DROP,
                                                                                        });

                                                                                        document.getElementById("lat").innerHTML = updateLat;
                                                                                        document.getElementById("lng").innerHTML = updateLng;
                                                                                        document.getElementById("speed").innerHTML = updateSpeed + " knt";
                                                                                        document.getElementById("feet").innerHTML = updateFeet + " feet";
                                                                                        document.getElementById("heading").innerHTML = updateHeading + " °";
                                                                                        document.getElementById("inuse").innerHTML = "Online let lietadla" + updateType ;
                                                                                        firstLoad = true;
                                                                                }

                                                                                if(updateInuse == 1 && firstLoad == true){
                                                                                        document.getElementById("lat").innerHTML = updateLat;
                                                                                        document.getElementById("lng").innerHTML = updateLng;
                                                                                        document.getElementById("speed").innerHTML = updateSpeed + " knt";
                                                                                        document.getElementById("feet").innerHTML = updateFeet + " feet";
                                                                                        document.getElementById("heading").innerHTML = updateHeading + " °";
                                                                                        document.getElementById("inuse").innerHTML = "Práve lietam s " + updateType ;
                                                                                        tracking = true;
                                                                                }

                                                                                if(updateInuse == 1 && firstLoad == true){
                                                                                var path = flightPath.getPath();
                                                                                        path.push(new google.maps.LatLng(response.lat,response.lng));
                                                                                        flightPath.setPath(path);
                                                                                var latlng = new google.maps.LatLng(response.lat,response.lng);
                                                                                        marker.setPosition(latlng);
                                                                                        map.panTo(latlng); // keep marker in center
                                                                                }
 
Nahoru Odpovědět
11.1.2018 16:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.