mam taki prosty skrypt zerzniety w wiekszosci z tutoriala googla, ktory ma mi umozliwic skopiowanie dlugosci i szerokosci geogr. po submicie formy.
Niestety wyglada to tak, ze jesli wybiore bezposrednio submit formy to funkcja 'codeAddress()' nie wypelnia mi pol 'x' i 'y' chociaz mam ja w metodzie 'onSubmit'. Calosc dziala poprawnie jesli najpierw klikne button 'Geocode', a dopiero potem klikne button 'submit'.
IMO sam submit wykonuje sie bez czekania, az zakonczy sie funkcja 'codeAddress()'. Jesli ktos ma pomysl jak zmusic JS zeby przed submitem poczekal do konca 'codeAddress()' i wypelnil mi pola 'x' i 'y' tak zebym potem w $_POST mial do nich dostep to bede wdzieczny.
Kod skryptu ponizej:

  1. <?php
  2. var_dump($_POST);
  3. ?>
  4.  
  5. <!DOCTYPE html>
  6. <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
  7. <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  8. <title>Google Maps JavaScript API v3 Example: Geocoding Simple</title>
  9. <link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
  10. <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
  11. <script type="text/javascript">
  12. var geocoder;
  13.  
  14. function codeAddress() {
  15. geocoder = new google.maps.Geocoder();
  16. address = "Warszawa, Polska";
  17. geocoder.geocode( { 'address': address}, function(results, status) {
  18. if (status == google.maps.GeocoderStatus.OK) {
  19. //alert(results[0].geometry.location);
  20. document.getElementById('x').value = results[0].geometry.location.lat();
  21. document.getElementById('y').value = results[0].geometry.location.lng();
  22. } else {
  23. alert("Geocode was not successful for the following reason: " + status);
  24. }
  25. });
  26.  
  27. //document.getElementById('f').submit();
  28.  
  29. }
  30.  
  31. </head>
  32. <div>
  33. <form id="f" method="post" onSubmit="codeAddress()">
  34. <input id="address" name="address" type="textbox" width="400" value="">
  35. <input type="hidden" id="x" name="x" value="0">
  36. <input type="hidden" id="y" name="y">
  37. <input type="button" value="Geocode" onclick="codeAddress()">
  38. <input type="submit" value="submit">
  39. </form>
  40. </div>
  41. </body>
  42. </html>


oki, mam juz odpowiedz z grupy googla; wystarczy 'document.getElementById('f').submit();' wstawic na koniec ciala funkcji 'function(results, status)' albo do jej IFa. Wtedy submit robi sie po nacisnieciu guzika 'geocode'. Dziala tak, a nie inaczej bo geocode() jest asynchroniczne. Wystarczylo poczytac dokumentacje przez kopiowaniem tutoriali. Pozostaje jeszcze obsluzyc submit z inputa, w ktory docelowo bede wpisywal adres, ale to juz jest proste.