Avatar billede compac Seniormester
26. februar 2010 - 17:50 Der er 5 kommentarer og
1 løsning

Overfør variabel til javascript fra php

Jeg skal overføre en variabel fra php til javascript. Når koden er indlæst skal javascript-dokumentet køres igennem således at gpx-filen bliver åbnet.


...
    function onLoad()
        {
            MyMap = new GMap2(document.getElementById("map"));
            MyMap.addControl(new GLargeMapControl());
            MyMap.addControl(new GMapTypeControl());
            LoadGPXFileIntoGoogleMap(MyMap, "<?php echo $gpx;?>");
        }

        //]]>
        </script>
<body=onLoad>
<?php
$idtur = $_GET[gpstur];
$sql = "select * from $vandreture where id = '$idtur'";
$result=mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_array($result)){
      $gpx = $row[gpx];                    //gpx-filnavn
}
?>
    </body>
Avatar billede tjens Nybegynder
26. februar 2010 - 21:28 #1
Det ser ellers udmærket ud, men onload skal defineres lidt anderledes, og databaselæsningen skal udføres inden variablen sættes ind i java script:

...
<?php
    $idtur = $_GET[gpstur];
    $sql = "select * from $vandreture where id = '$idtur'";
    $result=mysql_query($sql) or die(mysql_error());
    while($row=mysql_fetch_array($result)){
      $gpx = $row[gpx];                    //gpx-filnavn
    }
?>

window.onload = function  {
            MyMap = new GMap2(document.getElementById("map"));
            MyMap.addControl(new GLargeMapControl());
            MyMap.addControl(new GMapTypeControl());
            LoadGPXFileIntoGoogleMap(MyMap, "<?php echo $gpx;?>");
        }

</script>
</head>
<body>
...
</body>
Avatar billede compac Seniormester
26. februar 2010 - 22:09 #2
Udmærket!
Nu bliver selve filnavnet skrevet ud på skærmen (sikkert fra <php echo $gpx;?>.

Det skal imidlertid briges som input i den næste funktion,

Jeg skrev ikke LoadGPXFileIntoGoogleMapMyMap - funktionen ud idet jeg ikke mente det var nødvendigt.

Her er den:

var MyMap;

        function LoadGPXFileIntoGoogleMap(map, filename)
        {
            // Remove any existing overlays from the map.
            map.clearOverlays();

            var request = GXmlHttp.create();
            request.open("GET", filename, true);
            request.onreadystatechange = function()
            {
                if (request.readyState == 4)
                {
                    parser = new GPXParser(request.responseXML, map);
                    parser.SetTrackColour("#ff0000");                    // Set the track line colour
                    parser.SetTrackWidth(5);                            // Set the track line width
                    parser.SetMinTrackPointDelta(0.001);                // Set the minimum distance between track points
                    parser.CenterAndZoom(request.responseXML, G_HYBRID_MAP); // Center and Zoom the map over all the points.
                    parser.AddTrackpointsToMap();                        // Add the trackpoints
                    parser.AddWaypointsToMap();                            // Add the waypoints
                }
            }
            request.send(null);
        }

Det er vel <php echo $gpx;?> der skal justeres på for at det kan anvendes som input til denne funktion?
Avatar billede tjens Nybegynder
26. februar 2010 - 23:36 #3
Nej, det burde ikke kunne være den echo der skriver på skærmen, da den skriver i script sektionen.

Vi skal have undersøgt hvad der sker i klienten, ved at indsætte et par alerts:

var MyMap;

        function LoadGPXFileIntoGoogleMap(map, filename)
        {
            map.clearOverlays();
            alert("Before request: " + filename);
            var request = GXmlHttp.create();
            request.open("GET", filename, true);
            request.onreadystatechange = function()
            {
                if (request.readyState == 4)
                {
                    alert("After request: " + request.responseXML);
                    parser = new GPXParser(request.responseXML, map);
                    parser.SetTrackColour("#ff0000");                   
                    parser.SetTrackWidth(5);                           
                    parser.SetMinTrackPointDelta(0.001);               
                    parser.CenterAndZoom(request.responseXML, G_HYBRID_MAP);
                    parser.AddTrackpointsToMap();                       
                    parser.AddWaypointsToMap();                           
                }
            }
            request.send(null);
        }

Læg samtidig mærke til om der står noget på skærmen inden du trykker OK til første alert.
Avatar billede compac Seniormester
27. februar 2010 - 14:55 #4
Beklager - filnavnet som jeg fik stammede fra en echo der lå efter while-løkken. Jeg indtastede de alerts, som du foreslog, men der kom ikke noget frem.
Dvs. der er hul igennem php-afsnittet.
Resten af koden ser således ud:

Umiddelbart efter php-afsnittet:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Google Maps GPX Test - async</title>
        <style type="text/css">
            v\:* {
                behavior:url(#default#VML);
            }
        </style>
        <!-- Make the document body take up the full screen -->
        <style type="text/css">
            html, body {width: 100%; height: 100%}
            body {margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 0px}
        </style>       
        <script type="text/javascript" src="http://maps.google.com/maps?file=api&v&key="ABQAAAqqq53"></script>
       
    <script src="loadgpx.4.js" type="text/javascript"></script>
(loadgpx.4.js tæller wavepoints mm. og virker perfekt i andre programmer - så jeg er sikker på,at det ikke er her fejlen skal søges).

-herefter følger den javascriptkode, som er nævnt tidligere i tråden.

Body-afsnittet til sidst indeholder kun een sætning:

    <body>
    <div id="map" style="width: 100%; height: 100%;"></div>                       
    </body>

-det er vel den eneste sætning den behøver at indeholde?
Avatar billede compac Seniormester
27. februar 2010 - 15:38 #5
Nu fik jeg skrevet onLoad med lille: onload og tilføjet () efter function, så nu kommer der indhold i den første alertbox:
"Before request:gurreso2.xml".
- men i den anden mangler filnavnet.
Avatar billede tjens Nybegynder
28. februar 2010 - 08:48 #6
Så finder den vel ikke xml filen på din server?

Prøv at ændre alerten til:
  alert("After request: \nStatus: " + request.status + "\nStatusText: " +  request.statusText + "\nResponse: " + request.responseText);
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester