Chris K has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, I hope someone can help me with a problem I've been writing dynamically generated HTML/Javascript connecting to the Google Maps API 3. Basically, I'm writing the code (HTML/Javascript) to the browser but the map just won't render. However, if I save what I've written to a physical HTML file, the map renders. Does anyone know what could be wrong with the following: -----------------------------------------
print "Content-Type: text/html\n\n"; print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\ +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset +=utf-8\" /> <title>$page_title</title> <link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\" +media=\"all\" /> <script type=\"text/javascript\" src=\"http://maps.google.com/ +maps/api/js?sensor=false\"></script> "; my $single_point_javascript = " <script type=\"text/javascript\"> (function () { window.onload = function () { // Creating an object literal containing the properties // we want to pass to the map var options = { zoom: 12, center: new google.maps.LatLng(40.7257, -74.0047), mapTypeId: google.maps.MapTypeId.ROADMAP }; // end options // Creating the map var map = new google.maps.Map(document.getElementById('map +'), options); // Adding a marker to the map var marker = new google.maps.Marker({ position: new google.maps.LatLng(40.7257, -74.0047), map: map, title: 'Click me', icon: 'http://gmaps-samples.googlecode.com/svn/trunk/m +arkers/blue/blank.png' }); // end marker }; // end window onload }) (); // end initial function </script> "; print $single_point_javascript; print "\n</head>\n<body>\n<div id=\"map\"></div>\n</body>\n</html> +\n";
----------------------------------------- Thanks Chris

Replies are listed 'Best First'.
Re: Perl generated Google Maps Javascript won't work
by wind (Priest) on Apr 15, 2011 at 21:55 UTC

    If the physical html file works, then you should be able to get it to work using perl as well.

    Anon Monk suggested a HERE doc, which would work although you probably want my $blah = <<"__BLAH__"; since you want to interpolate the $page_title

    Alternatively, you can use qq as an alternative delimiter for your string "".

    print "Content-Type: text/html\n\n"; print qq{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>$page_title</title> <link rel="stylesheet" href="style.css" type="text/css" media="all" /> <script type="text/javascript" src="http://maps.google.com/maps/api/js +?sensor=false"></script> <script type="text/javascript"> (function () { window.onload = function () { // Creating an object literal containing the properties // we want to pass to the map var options = { zoom: 12, center: new google.maps.LatLng(40.7257, -74.0047), mapTypeId: google.maps.MapTypeId.ROADMAP }; // end options // Creating the map var map = new google.maps.Map(document.getElementById('map'), +options); // Adding a marker to the map var marker = new google.maps.Marker({ position: new google.maps.LatLng(40.7257, -74.0047), map: map, title: 'Click me', icon: 'http://gmaps-samples.googlecode.com/svn/trunk/marke +rs/blue/blank.png' }); // end marker }; // end window onload }) (); // end initial function </script> </head> <body> <div id="map"></div> </body> </html>};
      Hi, Thanks for the tips but it still isn't working. However, when I save it to a physical file, it works fine! However, I've just realised that the stylesheet can't be read in its current place (cgi-bin). I've changed the location in <link rel=\"stylesheet\" href=.... and it works! Stupid mistake and oversight on my part but I hope if anyone else has the same problem they can now find the solution on this site. Chris
Re: Perl generated Google Maps Javascript won't work
by Anonymous Monk on Apr 15, 2011 at 20:58 UTC
    Use here docs, then you don't have to escape anything
    my $blah = <<'__BLAH__'; Anything goes here, what you see is what you get __BLAH__ print $blah;
    Above program outputs
    Anything goes here, what you see is what you get