Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> skrypty js - nie zawsze się ładują
qbas-s
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


czasami mam taki problem, że skrypty JS nie zawsze się ładują. Np mam mapę google która pokazuje trasę z punktu A do pkt B. Czasami jest tak, że po załadowaniu strony wszystko pokaże się bez żadnego zarzutu, czasami mapka się pokaże a trasa nie, innym znowu razem cała mapka się nie załaduje. Próbowałem wczytywać pliki z parametrem async ale wtedy zupełnie nic nie działało. Jak wy rozwiązujecie takie problemy?

Ten post edytował qbas-s 29.05.2014, 22:17:49
Go to the top of the page
+Quote Post
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Możesz najwyżej sprawdzać czy obiekt na którym chcesz działać istnieje. Samo google maps czasami przecież też się gubi, a co dopiero API. Oczywiście to się zdarza bardzo bardzo rzadko. Jeśli u Ciebie często, to coś pewnie popsułeś (IMG:style_emoticons/default/tongue.gif)

Ten post edytował Damonsson 29.05.2014, 16:06:49
Go to the top of the page
+Quote Post
qbas-s
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


gdybym coś popsuł to za każdym razem by nie działało (IMG:style_emoticons/default/wink.gif)
Jak sprawdzić to o czym pisałeś? Czyli czy obiekt istnieje? Jeśli nie to jak go załadować?
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


W jaki sposób wczytujesz pliki JS?
Go to the top of the page
+Quote Post
qbas-s
post
Post #5





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


standardowo - poprzez <script
Go to the top of the page
+Quote Post
vermis
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


Jakieś błędy w konsoli JS?
Go to the top of the page
+Quote Post
qbas-s
post
Post #7





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


tak, kiedy skrypt google map nie ładuje się poprawnie wtedy otrzymuje:
Uncaught TypeError: Cannot read property 'setDirections' of undefined

Funkcja w której używam setDirections (ta funkcja ma za zadanie obliczać wyznaczać trasę z punktu a do punktu b, użytkownik może też podać punkty pomiędzy które znajdują się w additional_places):
[JAVASCRIPT] pobierz, plaintext
  1. function calcRoute() {
  2. var e = document.getElementById("autocomplete").value;
  3. var t = document.getElementById("autocomplete_to").value;
  4. var n = [];
  5. var r = document.getElementById("additional_places").value;
  6. var i = r.toString().split(";");
  7. for (var s = 0; s < i.length; s++) {
  8. if (i[s] !== "") {
  9. n.push({location: i[s], stopover: true})
  10. }
  11. }
  12. var o = {origin: e, destination: t, waypoints: n, optimizeWaypoints: false, travelMode: google.maps.TravelMode.DRIVING};
  13. var u = new google.maps.DirectionsService;
  14. u.route(o, function(e, t) {
  15. if (t == google.maps.DirectionsStatus.OK) {
  16. directionsDisplay.setDirections(e);
  17. var n = e.routes[0];
  18. var r = document.getElementById("distance");
  19. var i = document.getElementById("dist_inp");
  20. r.innerHTML = "";
  21. var s = 0;
  22. for (var o = 0; o < n.legs.length; o++) {
  23. s += parseInt(n.legs[o].distance.value)
  24. }
  25. r.innerHTML = s / 1e3;
  26. i.value = s / 1e3;
  27. if (trasa != null)
  28. trasa.setMap(null);
  29. polylineOptions = {map: map, strokeColor: "#FF0000", strokeOpacity: .7, strokeWeight: 5, path: e.routes[0].overview_path};
  30. trasa = new google.maps.Polyline(polylineOptions);
  31. map.fitBounds(e.routes[0].bounds);
  32. }
  33. });
  34. }
[JAVASCRIPT] pobierz, plaintext


Ten post edytował qbas-s 1.06.2014, 16:07:08
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Gdyby GM się nie ładował, to błąd miałbyś już w linii 12.
Gdzie inicjujesz zmienną "directionsDisplay"?
Go to the top of the page
+Quote Post
qbas-s
post
Post #9





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


mam do tego funkcję
[JAVASCRIPT] pobierz, plaintext
  1. function initialize() {
  2. directionsDisplay = new google.maps.DirectionsRenderer;
  3. var e = {center: new google.maps.LatLng(52.232938, 21.061194), zoom: 12};
  4. map = new google.maps.Map(document.getElementById("mapcanvas"), e);
  5. var t = new google.maps.panoramio.PanoramioLayer;
  6. t.setMap(map);
  7. autocomplete = new google.maps.places.Autocomplete(document.getElementById("autocomplete"), {types: ["geocode"]});
  8. autocomplete_to = new google.maps.places.Autocomplete(document.getElementById("autocomplete_to"), {types: ["geocode"]});
  9. google.maps.event.addListener(autocomplete, "place_changed", function() {
  10. });
  11. google.maps.event.addListener(autocomplete_to, "place_changed", function() {
  12. });
  13. }
[JAVASCRIPT] pobierz, plaintext


która jest inicjowana zaraz po załadowaniu strony;
[JAVASCRIPT] pobierz, plaintext
  1. google.maps.event.addDomListener(window, "load", initialize);
[JAVASCRIPT] pobierz, plaintext
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


A calcRoute, w którym momencie jest wywoływana?
Go to the top of the page
+Quote Post
qbas-s
post
Post #11





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


napisałem sobie funkcje która w razie potrzeby przekazuje do widoku kod js który jest wyświetlany przed </body>. Tak jest w tym przyadku, funkcja calcRoute() jest wyświetlana przed </body> i ma na celu pokazanie trasy którą wcześniej zapisał sobie użytkownik. Trasa jest wyznaczana na podstawie danych zawartych w inputach o id: autocomplete, autocomplete_to i additional_places
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie wiem czy dobrze rozumiem, ale jeśli wywołujesz ją bezpośrednio w head nie czekając na jakiekolwiek zdarzenie, to jest ona wywoływana wcześniej niż "initialize".
Go to the top of the page
+Quote Post
qbas-s
post
Post #13





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


właśnie initialize jest wywoływane w head a wywołaie funkcji calcRoute() tuż przed znacznikiem </body> czyli na końcu dokumentu. Niby powinno działać bez zarzutu. Dodatkowe teraz zauważyłem, że jeśli nie wywołuję w nagłówku jquery.2.0.3.min.js i jquery.1.2.1.migrate.min.js to skrypt google map działa poprawnie za każdym razem

Ten post edytował qbas-s 1.06.2014, 19:08:08
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie chodzi to o kolejność w kodzie.
initialize jest wywoływane w onLoad GM, czyli najzwyczajniej w 99,99% przypadkach później niż calcRoute.
Musisz calcRoute wywołać po initialize (np. wewnątrz tejże funkcji).
Go to the top of the page
+Quote Post
qbas-s
post
Post #15





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


(IMG:style_emoticons/default/biggrin.gif) masz rację, teraz działa za każdym razem, sog dla Ciebie a jak będziesz w Wawie to zapraszam na bro (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.09.2025 - 19:49